diff --git a/servers/nextjs/presentation-templates/professional/AboutUsSlide.tsx b/servers/nextjs/presentation-templates/professional/AboutUsSlide.tsx deleted file mode 100644 index 9688c8d2..00000000 --- a/servers/nextjs/presentation-templates/professional/AboutUsSlide.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "About Us Slide"; -export const layoutId = "about-us-slide"; -export const layoutDescription = - "A slide with an introduction to the organization"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(25).default("ABOUT US").meta({ - description: - "Main section heading - can be used for any organizational introduction", - }), - - sectionSubtitle: z - .string() - .min(5) - .max(40) - .default("GET TO KNOW US BETTER") - .meta({ - description: - "Supporting subtitle that invites audience engagement and builds connection", - }), - - organizationDescription: z - .string() - .min(50) - .max(300) - .default( - "We believe in the transformative power of innovation, strategic thinking, and cutting-edge solutions. Our mission is simple: to empower organizations with comprehensive strategies that not only elevate performance but also drive tangible growth and success." - ) - .meta({ - description: - "Primary description of the organization's mission, values, and approach", - }), - - additionalContext: z - .string() - .min(30) - .max(150) - .default( - "What sets us apart is not just our expertise but our commitment to understanding the unique needs of each client." - ) - .meta({ - description: - "Additional context or differentiating statement about the organization", - }), - - featuredImage: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Professional business team analyzing data and working collaboratively", - }).meta({ - description: - "Primary visual that represents the organization's work or environment", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), - - showColorBlocks: z.boolean().default(true).meta({ - description: - "Whether to show colored background blocks for visual hierarchy", - }), - - showAccentSquare: z.boolean().default(true).meta({ - description: "Whether to display the accent square decoration element", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definitionz -const AboutUsSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - organizationDescription, - additionalContext, - featuredImage, - showVisualAccents, - showColorBlocks, - showAccentSquare, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} - - {/* Decorative gray line */} -
-
- - {/* Description Text */} - {organizationDescription && ( -

- {organizationDescription} -

- )} - - {/* Additional Text */} - {additionalContext && ( -
-

- {additionalContext} -

-
- )} -
- - {/* Right Side - Image and Decorative Elements */} -
- {/* Yellow Square - Top Right */} - {showAccentSquare && ( -
- )} - - {/* Decorative Circle - On Yellow Square */} - {showVisualAccents && ( -
- )} - - {/* Business Image - Left positioned */} - {featuredImage?.__image_url__ && ( -
- {featuredImage.__image_prompt__} -
- )} - - {/* Teal Accent Areas */} - {showColorBlocks && ( - <> - {/* Vertical Teal Strip - Center */} -
- - )} -
-
-
- ); -}; - -export default AboutUsSlide; diff --git a/servers/nextjs/presentation-templates/professional/BusinessModelSlide.tsx b/servers/nextjs/presentation-templates/professional/BusinessModelSlide.tsx deleted file mode 100644 index 9b1fa1d5..00000000 --- a/servers/nextjs/presentation-templates/professional/BusinessModelSlide.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import React from "react"; -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; -import { - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, - ChartTooltipContent, -} from "@/components/ui/chart"; -import { BarChart, Bar, XAxis, YAxis, CartesianGrid } from "recharts"; - -export const layoutName = "Business Model Slide"; -export const layoutId = "business-model-slide"; -export const layoutDescription = "A slide with a business model"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("BUSINESS MODEL").meta({ - description: - "Main section heading - adapt to presentation topic (e.g., 'Revenue Strategy', 'Funding Model', 'Implementation Plan', 'Solution Framework')", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("SUSTAINABLE REVENUE AND VALUE CREATION") - .meta({ - description: - "Supporting subtitle that describes the approach - adapt to topic (e.g., 'Carbon Reduction Strategy', 'Healthcare Delivery Model', 'Educational Framework')", - }), - - modelDescription: z - .string() - .min(50) - .max(300) - .default( - "Our business model focuses on creating sustainable value through multiple revenue streams, strategic partnerships, and customer-centric solutions. We prioritize long-term relationships and scalable growth opportunities." - ) - .meta({ - description: - "IMPORTANT: Provide topic-specific description of the model/approach. For global warming: describe carbon reduction strategies, renewable energy adoption, sustainability metrics. For healthcare: treatment protocols, patient care models. For education: learning methodologies, curriculum design. Always provide concrete, relevant details for the presentation topic.", - }), - - headerVisual: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1559136555-9303baea8ebd?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Business strategy meeting with charts, graphs and team collaboration", - }).meta({ - description: - "Header visual representing the topic area - ADAPT the image prompt to match presentation topic (e.g., 'Climate scientists analyzing global warming data', 'Medical team reviewing patient care protocols', 'Teachers planning educational curriculum')", - }), - - chartData: z - .array( - z.object({ - category: z.string().min(3).max(25), - value: z.number().min(0).max(100), - color: z.string().min(3).max(20).optional(), - }) - ) - .min(2) - .max(6) - .default([ - { category: "Product Sales", value: 45, color: "#22C55E" }, - { category: "Services", value: 30, color: "#0891B2" }, - { category: "Partnerships", value: 15, color: "#FDE047" }, - { category: "Licensing", value: 10, color: "#F97316" }, - ]) - .meta({ - description: - "CRITICAL: Provide actual data relevant to the presentation topic. For global warming: CO2 emission sources (Transport 29%, Energy 25%, Industry 21%, Agriculture 24%), temperature rise by decade, renewable energy adoption rates. For healthcare: treatment success rates, patient demographics, cost breakdowns. For education: student performance metrics, learning outcomes, resource allocation. Always use REAL topic-specific data with appropriate categories and realistic values.", - }), - - showChart: z.boolean().default(true).meta({ - description: - "Whether to display the data visualization - typically keep true for data-driven presentations", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), -}); - -// Chart configuration -const chartConfig = { - series1: { - label: "Series 1", - color: "#1D9A8A", - }, - series2: { - label: "Series 2", - color: "#E8F4B8", - }, - series3: { - label: "Series 3", - color: "#A8C97F", - }, -}; - -// Type inference -type SchemaType = z.infer; - -// Component definition -const BusinessModelSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - modelDescription, - headerVisual, - chartData, - showChart, - showVisualAccents, - } = data; - - return ( -
- {/* Header Image Section */} - {headerVisual?.__image_url__ && ( -
- {headerVisual.__image_prompt__} -
-
- )} - - {/* Main Content Area */} -
- {/* Left Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} -
- - {/* Model Description */} - {modelDescription && ( -
-

- {modelDescription} -

-
- )} - - {/* Visual Accents */} - {showVisualAccents && ( - <> -
-
- - )} -
- - {/* Right Side - Chart */} -
- {showChart && chartData && chartData.length > 0 && ( -
- - - - - - } /> - - - -
- )} -
-
- - {/* Bottom accent strip */} -
-
- ); -}; - -export default BusinessModelSlide; diff --git a/servers/nextjs/presentation-templates/professional/MarketSizeSlide.tsx b/servers/nextjs/presentation-templates/professional/MarketSizeSlide.tsx deleted file mode 100644 index 0ac39595..00000000 --- a/servers/nextjs/presentation-templates/professional/MarketSizeSlide.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Market Size Slide"; -export const layoutId = "market-size-slide"; -export const layoutDescription = "A slide with a market size analysis"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("MARKET ANALYSIS").meta({ - description: - "Main section heading - can be 'Market Size', 'Market Opportunity', 'Industry Overview', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("UNDERSTANDING THE OPPORTUNITY LANDSCAPE") - .meta({ - description: - "Supporting subtitle that frames the market discussion and opportunity scope", - }), - - marketDefinitions: z - .array( - z.object({ - marketType: z.string().min(3).max(30), - marketDescription: z.string().min(20).max(150), - marketValue: z.string().min(3).max(25).optional(), - }) - ) - .min(2) - .max(3) - .default([ - { - marketType: "Total Addressable Market (TAM)", - marketDescription: - "The overall revenue opportunity available if we achieved 100% market share across all segments and geographies.", - marketValue: "$50B", - }, - { - marketType: "Serviceable Addressable Market (SAM)", - marketDescription: - "The portion of TAM targeted by our products and services within our geographic reach.", - marketValue: "$15B", - }, - { - marketType: "Serviceable Obtainable Market (SOM)", - marketDescription: - "The portion of SAM that we can realistically capture based on our resources and market conditions.", - marketValue: "$3B", - }, - ]) - .meta({ - description: - "List of market definitions and opportunities with descriptions and potential values", - }), - - visualRepresentation: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1597149962419-0d900ac2b46c?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "World map showing global market reach and geographic distribution", - }).meta({ - description: - "Visual that represents market scope - could be a world map, chart, or geographic visualization", - }), - - showYellowUnderline: z.boolean().default(true).meta({ - description: "Whether to display the decorative yellow underline accent", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const MarketSizeSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - marketDefinitions, - visualRepresentation, - showYellowUnderline, - showVisualAccents, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} - - {/* Yellow Decorative Underline */} - {showYellowUnderline && ( -
- )} -
- - {/* Market Definitions List */} - {marketDefinitions && marketDefinitions.length > 0 && ( -
- {marketDefinitions.map((market, index) => ( -
-
-

- {market.marketType} -

- {market.marketValue && ( - - {market.marketValue} - - )} -
-

- {market.marketDescription} -

-
- ))} -
- )} -
- - {/* Right Side - Visual Representation */} -
- {/* Visual Accents */} - {showVisualAccents && ( - <> - {/* Decorative circles */} -
-
- - )} - - {/* Visual Representation */} - {visualRepresentation?.__image_url__ && ( -
- {visualRepresentation.__image_prompt__} -
- )} -
-
- - {/* Bottom accent strip */} -
-
- ); -}; - -export default MarketSizeSlide; diff --git a/servers/nextjs/presentation-templates/professional/OurServiceSlide.tsx b/servers/nextjs/presentation-templates/professional/OurServiceSlide.tsx deleted file mode 100644 index 64a23020..00000000 --- a/servers/nextjs/presentation-templates/professional/OurServiceSlide.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Our Service Slide"; -export const layoutId = "our-service-slide"; -export const layoutDescription = "A slide with a list of services"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("OUR SERVICES").meta({ - description: - "Main section heading - can be 'Our Services', 'What We Offer', 'Service Portfolio', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("COMPREHENSIVE SOLUTIONS TAILORED FOR SUCCESS") - .meta({ - description: - "Supporting subtitle that describes the service approach or value proposition", - }), - - bulletPoints: z - .array(z.string().min(10).max(40)) - .min(4) - .max(6) - .default([ - "Customized solutions for your business", - "Expert guidance and support", - "Innovative technology solutions", - "Comprehensive service portfolio", - ]) - .meta({ - description: "Bullet points to describe the services offered", - }), - - serviceHighlight: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1556761175-b413da4baf72?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Professional service delivery or team working on client solutions", - }).meta({ - description: - "Visual that represents service delivery, expertise, or client collaboration", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), - - showColorBlocks: z.boolean().default(true).meta({ - description: - "Whether to show colored background sections for visual hierarchy", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const OurServiceSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - serviceHighlight, - showVisualAccents, - showColorBlocks, - bulletPoints, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left - Title */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} - -
- {bulletPoints && - bulletPoints.map((point, index) => ( -
-
-
-

- {point} -

-
-
- ))} -
- - {/* Visual Accents */} - {showVisualAccents && ( - <> - {/* Decorative elements */} -
-
- - )} -
- - {/* Right - Service Highlight */} -
- {/* Service Highlight Image */} - {serviceHighlight?.__image_url__ && ( -
- {serviceHighlight.__image_prompt__} -
- )} - - {/* Color overlay if enabled */} - {showColorBlocks && ( -
- )} -
-
- - {/* Bottom accent strip */} - {showColorBlocks && ( -
- )} -
- ); -}; - -export default OurServiceSlide; diff --git a/servers/nextjs/presentation-templates/professional/ProblemsSlide.tsx b/servers/nextjs/presentation-templates/professional/ProblemsSlide.tsx deleted file mode 100644 index 5e82b403..00000000 --- a/servers/nextjs/presentation-templates/professional/ProblemsSlide.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Problems Slide"; -export const layoutId = "problems-slide"; -export const layoutDescription = "A slide with a list of problems"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(25).default("CHALLENGES").meta({ - description: - "Main section heading - can be 'Problems', 'Challenges', 'Issues', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(50) - .default("KEY CHALLENGES TO ADDRESS") - .meta({ - description: "Supporting subtitle that frames the problem discussion", - }), - - challengeItems: z - .array( - z.object({ - itemNumber: z.string().min(1).max(3), - challengeTitle: z.string().min(5).max(40), - challengeDescription: z.string().min(20).max(200), - }) - ) - .min(2) - .max(3) - .default([ - { - itemNumber: "01", - challengeTitle: "Inefficient Processes", - challengeDescription: - "Current workflows and systems lack optimization, leading to wasted resources and reduced productivity across all operational areas.", - }, - { - itemNumber: "02", - challengeTitle: "Limited Scalability", - challengeDescription: - "Existing infrastructure and methodologies cannot accommodate growth, creating bottlenecks that hinder expansion and progress.", - }, - { - itemNumber: "03", - challengeTitle: "Resource Constraints", - challengeDescription: - "Limited availability of key resources including time, budget, and skilled personnel creates barriers to achieving desired outcomes.", - }, - ]) - .meta({ - description: - "List of key challenges or problems with numbered identification and detailed descriptions", - }), - - supportingVisual: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1542744173-8e7e53415bb0?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Professional workspace showing analysis and problem-solving activities", - }).meta({ - description: - "Visual that supports the problem discussion - could show analysis, challenges, or work environment", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), - - showColorBlocks: z.boolean().default(true).meta({ - description: "Whether to show colored accent blocks for visual hierarchy", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const ProblemsSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - challengeItems, - supportingVisual, - showVisualAccents, - showColorBlocks, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} -
- - {/* Challenge Items List */} - {challengeItems && challengeItems.length > 0 && ( -
- {challengeItems.map((item, index) => ( -
- {/* Number Circle */} -
- - {item.itemNumber} - -
- - {/* Content */} -
-

- {item.challengeTitle} -

-

- {item.challengeDescription} -

-
-
- ))} -
- )} -
- - {/* Right Side - Image and Decorative Elements */} -
- {/* Decorative Circle */} - {showVisualAccents && ( -
- )} - - {/* Supporting Visual */} - {supportingVisual?.__image_url__ && ( -
- {supportingVisual.__image_prompt__} -
- )} - - {/* Teal Accent Block - Right Edge */} - {showColorBlocks && ( -
- )} -
-
- - {/* Bottom Teal Stripe */} -
-
- ); -}; - -export default ProblemsSlide; diff --git a/servers/nextjs/presentation-templates/professional/SolutionsSlide.tsx b/servers/nextjs/presentation-templates/professional/SolutionsSlide.tsx deleted file mode 100644 index 2b8b731e..00000000 --- a/servers/nextjs/presentation-templates/professional/SolutionsSlide.tsx +++ /dev/null @@ -1,208 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Solutions Slide"; -export const layoutId = "solutions-slide"; -export const layoutDescription = "A slide with a list of solutions"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(25).default("OUR SOLUTIONS").meta({ - description: - "Main section heading - can be 'Solutions', 'Our Approach', 'How We Help', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(50) - .default("COMPREHENSIVE SOLUTIONS FOR YOUR NEEDS") - .meta({ - description: "Supporting subtitle that frames the solution discussion", - }), - - solutionItems: z - .array( - z.object({ - itemNumber: z.string().min(1).max(3), - solutionTitle: z.string().min(5).max(40), - solutionDescription: z.string().min(20).max(200), - }) - ) - .min(2) - .max(3) - .default([ - { - itemNumber: "01", - solutionTitle: "Process Optimization", - solutionDescription: - "Streamline workflows and implement efficient systems that reduce waste, improve productivity, and maximize resource utilization across all operational areas.", - }, - { - itemNumber: "02", - solutionTitle: "Scalable Infrastructure", - solutionDescription: - "Build robust, flexible systems and methodologies that can grow with your organization, eliminating bottlenecks and supporting expansion efforts.", - }, - { - itemNumber: "03", - solutionTitle: "Resource Management", - solutionDescription: - "Strategic allocation and optimization of available resources including time, budget, and personnel to achieve maximum impact and desired outcomes.", - }, - ]) - .meta({ - description: - "List of key solutions or approaches with numbered identification and detailed descriptions", - }), - - primaryVisual: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1560472354-b33ff0c44a43?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Modern workspace with team collaboration and strategic planning", - }).meta({ - description: - "Primary visual representing teamwork, strategy, or solution implementation", - }), - - brandingVisual: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/150x80/22C55E/FFFFFF?text=LOGO", - __image_prompt__: "Organization logo or brand mark", - }).meta({ - description: "Logo or branding element to maintain visual identity", - }), - - showYellowUnderline: z.boolean().default(true).meta({ - description: "Whether to display the decorative yellow underline accent", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), - - showColorBlocks: z.boolean().default(true).meta({ - description: - "Whether to show colored background blocks for visual hierarchy", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const SolutionsSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - solutionItems, - primaryVisual, - brandingVisual, - showYellowUnderline, - showVisualAccents, - showColorBlocks, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Images and Branding */} -
- {/* Top Image Area */} - {primaryVisual?.__image_url__ && ( -
- {primaryVisual.__image_prompt__} -
- )} - - {/* Bottom Branding Area */} -
- {brandingVisual?.__image_url__ && ( - {brandingVisual.__image_prompt__} - )} -
-
- - {/* Right Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} - - {/* Yellow Decorative Underline */} - {showYellowUnderline && ( -
- )} -
- - {/* Solution Items List */} - {solutionItems && solutionItems.length > 0 && ( -
- {solutionItems.map((item, index) => ( -
- {/* Number Circle */} -
- - {item.itemNumber} - -
- - {/* Content */} -
-

- {item.solutionTitle} -

-

- {item.solutionDescription} -

-
-
- ))} -
- )} - - {/* Visual Accents */} - {showVisualAccents && ( - <> - {/* Decorative circles */} -
-
- - )} -
-
- - {/* Color blocks for visual hierarchy */} - {showColorBlocks && ( - <> - {/* Bottom accent strip */} -
- {/* Side accent */} -
- - )} -
- ); -}; - -export default SolutionsSlide; diff --git a/servers/nextjs/presentation-templates/professional/StatisticCircularSlide.tsx b/servers/nextjs/presentation-templates/professional/StatisticCircularSlide.tsx deleted file mode 100644 index e4178caa..00000000 --- a/servers/nextjs/presentation-templates/professional/StatisticCircularSlide.tsx +++ /dev/null @@ -1,268 +0,0 @@ -import * as z from "zod"; -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Statistic Circular Slide"; -export const layoutId = "statistic-circular-slide"; -export const layoutDescription = "A slide with a circular statistic"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(20).default("CLIENT SATISFACTION").meta({ - description: - "Main section heading - adapt to presentation topic (e.g., 'Climate Progress', 'Treatment Success', 'Learning Achievement', 'Project Completion')", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(35) - .default("MEASURING OUR IMPACT AND SUCCESS") - .meta({ - description: - "Supporting subtitle that provides context - adapt to topic (e.g., 'Tracking Climate Action Progress', 'Monitoring Patient Recovery Rates', 'Assessing Educational Outcomes')", - }), - - description: z - .string() - .min(2) - .max(230) - .default( - "At the heart of our success lies the unwavering satisfaction of our clients. We take pride in fostering lasting partnerships, consistently exceeding expectations, and delivering results that not only meet but surpass the unique objectives of each client we serve." - ) - .meta({ - description: "Name of the organization or entity being measured", - }), - - brandLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/22C55E/FFFFFF?text=L", - __image_prompt__: - "Professional organization logo - clean and modern design", - }).meta({ - description: "Logo or brand mark representing the organization", - }), - - satisfactionRate: z - .object({ - value: z.number().min(0).max(100), - label: z.string().min(5).max(30), - percentage: z.string().min(2).max(5), - }) - .default({ - value: 90, - label: "CLIENT'S REPEAT ORDER", - percentage: "90%", - }) - .meta({ - description: - "CRITICAL: Provide topic-specific circular progress metric. For global warming: {value: 33, label: 'CO2 REDUCTION ACHIEVED', percentage: '33%'} or {value: 78, label: 'RENEWABLE ENERGY ADOPTION', percentage: '78%'}. For healthcare: {value: 95, label: 'PATIENT RECOVERY RATE', percentage: '95%'} or {value: 87, label: 'TREATMENT SUCCESS RATE', percentage: '87%'}. For education: {value: 92, label: 'GRADUATION SUCCESS RATE', percentage: '92%'}. Use realistic percentages and meaningful labels.", - }), - - statisticBlocks: z - .array( - z.object({ - percentage: z.string().min(2).max(5), - description: z.string().min(20).max(150), - backgroundColor: z.enum(["teal", "beige"]), - }) - ) - .min(2) - .max(2) - .default([ - { - percentage: "90%", - description: - "Our client loyalty speaks volumes as evidenced by a robust repeat order rate", - backgroundColor: "teal", - }, - { - percentage: "99%", - description: - "Our paramount focus on client satisfaction is the bedrock of our agency's success.", - backgroundColor: "beige", - }, - ]) - .meta({ - description: - "ESSENTIAL: Provide two topic-relevant supporting statistics. For global warming: [{percentage: '1.1°C', description: 'Global temperature increase since pre-industrial times represents urgent need for climate action', backgroundColor: 'teal'}, {percentage: '410ppm', description: 'Current atmospheric CO2 levels are the highest in human history requiring immediate intervention', backgroundColor: 'beige'}]. For healthcare: [{percentage: '85%', description: 'Early detection rates have improved significantly with advanced screening technologies', backgroundColor: 'teal'}, {percentage: '72h', description: 'Average patient response time demonstrates our commitment to rapid care delivery', backgroundColor: 'beige'}]. Always provide factual, impactful statistics.", - }), - - companyLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/FFFFFF/1D9A8A?text=C", - __image_prompt__: "Clean modern company logo icon in white", - }).meta({ - description: "Company logo icon", - }), - - companyName: z.string().min(2).max(25).default("Deskpro").meta({ - description: "Company name for branding", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const StatisticCircularSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - description, - brandLogo, - satisfactionRate, - statisticBlocks, - companyLogo, - companyName, - } = data; - - const getBackgroundClass = (bg: string) => { - switch (bg) { - case "teal": - return "bg-teal-600 text-white"; - case "beige": - return "bg-yellow-200 text-gray-900"; - default: - return "bg-gray-200 text-gray-900"; - } - }; - - // Calculate stroke dash array for circular progress - const radius = 150; - const circumference = 2 * Math.PI * radius; - const strokeDasharray = circumference; - const strokeDashoffset = - circumference - (circumference * (satisfactionRate?.value || 90)) / 100; - - return ( -
- {/* Main Content Area */} -
- {/* Header Section */} -
- {/* Left - Title */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} -
- - {/* Right - Company Branding */} -
-
- {companyLogo?.__image_url__ && ( -
- {companyLogo.__image_prompt__} -
- )} - {companyName && ( - - {companyName} - - )} -
-
-
- - {/* Content Section */} -
- {/* Left Side - Circular Chart */} -
-
- {/* Circular Progress SVG */} - - {/* Background circle */} - - {/* Progress circle */} - - - - {/* Center Content */} -
- {satisfactionRate?.label && ( -

- {satisfactionRate.label} -

- )} - {satisfactionRate?.percentage && ( - - {satisfactionRate.percentage} - - )} -
-
-
- - {/* Right Side - Content and Statistics */} -
- {/* Description */} -
- {description && ( -

- {description} -

- )} -
- - {/* Statistics Blocks */} - {statisticBlocks && statisticBlocks.length > 0 && ( -
- {statisticBlocks.map((block, index) => ( -
- {/* Percentage Block */} -
- - {block.percentage} - -
- - {/* Description Block */} -
-

- {block.description} -

-
-
- ))} -
- )} -
-
-
-
- ); -}; - -export default StatisticCircularSlide; diff --git a/servers/nextjs/presentation-templates/professional/StatisticDualChartSlide.tsx b/servers/nextjs/presentation-templates/professional/StatisticDualChartSlide.tsx deleted file mode 100644 index 3780d301..00000000 --- a/servers/nextjs/presentation-templates/professional/StatisticDualChartSlide.tsx +++ /dev/null @@ -1,361 +0,0 @@ -import React from "react"; -import * as z from "zod"; -import { ImageSchema, IconSchema } from "../defaultSchemes"; -import { - ChartContainer, - ChartTooltip, - ChartTooltipContent, -} from "@/components/ui/chart"; -import { - BarChart, - Bar, - AreaChart, - Area, - XAxis, - YAxis, - CartesianGrid, -} from "recharts"; - -export const layoutName = "Statistic Dual Chart Slide"; -export const layoutId = "statistic-dual-chart-slide"; -export const layoutDescription = "A slide with a statistic and a chart"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("PERFORMANCE METRICS").meta({ - description: - "Main section heading - adapt to presentation topic (e.g., 'Climate Analysis', 'Health Outcomes', 'Research Data', 'Impact Assessment')", - }), - - organizationName: z - .string() - .min(2) - .max(30) - .default("Your Organization") - .meta({ - description: "Name of the organization or entity presenting the data", - }), - - brandLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/22C55E/FFFFFF?text=L", - __image_prompt__: - "Professional organization logo - clean and modern design", - }).meta({ - description: "Logo or brand mark representing the organization", - }), - - barChartData: z - .array( - z.object({ - name: z.string(), - series1: z.number(), - series2: z.number(), - series3: z.number(), - }) - ) - .min(5) - .max(5) - .default([ - { name: "Item 1", series1: 5, series2: 5, series3: 8 }, - { name: "Item 2", series1: 8, series2: 8, series3: 15 }, - { name: "Item 3", series1: 15, series2: 10, series3: 18 }, - { name: "Item 4", series1: 18, series2: 14, series3: 22 }, - { name: "Item 5", series1: 22, series2: 20, series3: 8 }, - ]) - .meta({ - description: - "CRITICAL: Provide topic-specific data for the left bar chart. For global warming: 5 years of data (2020-2024) with CO2 emissions by sector (Transport, Industry, Energy) with actual values. For healthcare: Patient outcomes across 5 categories (Prevention, Treatment, Recovery) with real percentages. For education: Student performance across 5 metrics (Reading, Math, Science) with grade levels. Use realistic data patterns and values.", - }), - - areaChartData: z - .array( - z.object({ - name: z.string(), - series1: z.number(), - series2: z.number(), - series3: z.number(), - }) - ) - .min(5) - .max(5) - .default([ - { name: "Item 1", series1: 20, series2: 30, series3: 15 }, - { name: "Item 2", series1: 40, series2: 45, series3: 35 }, - { name: "Item 3", series1: 45, series2: 50, series3: 80 }, - { name: "Item 4", series1: 50, series2: 45, series3: 85 }, - { name: "Item 5", series1: 80, series2: 75, series3: 120 }, - ]) - .meta({ - description: - "CRITICAL: Provide topic-specific data for the right area chart. For global warming: Cumulative data over 5 time periods showing renewable energy adoption, carbon reduction efforts, and policy implementations with realistic growth trends. For healthcare: Cumulative patient care metrics showing improvement over time. For education: Progressive learning outcomes showing student advancement. Ensure data shows meaningful trends relevant to the topic.", - }), - - leftChartTitle: z - .string() - .min(5) - .max(40) - .default("Our Customer's Satisfaction") - .meta({ - description: - "IMPORTANT: Provide topic-specific title for left chart. For global warming: 'Global CO2 Emissions by Sector', 'Temperature Rise by Region', 'Renewable Energy Adoption'. For healthcare: 'Patient Treatment Outcomes', 'Healthcare Quality Metrics', 'Recovery Success Rates'. For education: 'Student Performance by Subject', 'Learning Progress Assessment', 'Academic Achievement Trends'.", - }), - - leftChartDescription: z - .string() - .min(20) - .max(200) - .default( - "An impressive client satisfaction rate underscores our unwavering commitment to delivering exceptional service and exceeding expectations." - ) - .meta({ - description: - "ESSENTIAL: Provide topic-relevant description explaining the left chart data. For global warming: Explain emission sources, trends, and implications. For healthcare: Describe treatment effectiveness and patient outcomes. For education: Explain performance metrics and learning indicators. Make it informative and specific to the data shown.", - }), - - rightChartTitle: z.string().min(5).max(40).default("Repeat Order Rate").meta({ - description: - "IMPORTANT: Provide topic-specific title for right chart. For global warming: 'Climate Action Progress', 'Carbon Reduction Timeline', 'Sustainability Milestones'. For healthcare: 'Patient Recovery Timeline', 'Treatment Progress Tracking', 'Health Improvement Trajectory'. For education: 'Learning Progress Over Time', 'Student Development Path', 'Academic Growth Timeline'.", - }), - - rightChartDescription: z - .string() - .min(20) - .max(200) - .default( - "Our remarkable client repeat order rate of 123 times are testament to the quality of our products/services and the trust our clients place in our ability." - ) - .meta({ - description: - "ESSENTIAL: Provide topic-relevant description explaining the right chart's cumulative/timeline data. For global warming: Describe progress in climate action, policy impact, or environmental improvements. For healthcare: Explain patient journey and recovery progression. For education: Describe learning advancement and skill development over time. Make it specific and data-driven.", - }), -}); - -// Chart configuration -const chartConfig = { - series1: { - label: "Series 1", - color: "#1D9A8A", - }, - series2: { - label: "Series 2", - color: "#A8C97F", - }, - series3: { - label: "Series 3", - color: "#E8F4B8", - }, -}; - -// Type inference -type SchemaType = z.infer; - -// Component definition -const StatisticDualChartSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - organizationName, - brandLogo, - barChartData, - areaChartData, - leftChartTitle, - leftChartDescription, - rightChartTitle, - rightChartDescription, - } = data; - - return ( -
- {/* Header Section */} -
- {/* Title */} - {sectionTitle && ( -

{sectionTitle}

- )} - - {/* Company Branding */} -
- {brandLogo?.__image_url__ && ( -
- {brandLogo.__image_prompt__} -
- )} - {organizationName && ( - - {organizationName} - - )} -
-
- - {/* Content Section */} -
- {/* Left Chart Section */} -
- {/* Chart Legend */} -
-
-
- Series 1 -
-
-
- Series 2 -
-
-
- Series 3 -
-
- - {/* Bar Chart */} - {barChartData && barChartData.length > 0 && ( -
- - - - - - } /> - - - - - -
- )} - - {/* Chart Description */} -
- {leftChartTitle && ( -

- {leftChartTitle} -

- )} - {leftChartDescription && ( -

- {leftChartDescription} -

- )} -
-
- - {/* Right Chart Section */} -
- {/* Chart Legend */} -
-
-
- Series 1 -
-
-
- Series 2 -
-
-
- Series 3 -
-
- - {/* Area Chart */} - {areaChartData && areaChartData.length > 0 && ( -
- - - - - - } /> - - - - - -
- )} - - {/* Chart Description */} -
- {rightChartTitle && ( -

- {rightChartTitle} -

- )} - {rightChartDescription && ( -

- {rightChartDescription} -

- )} -
-
-
-
- ); -}; - -export default StatisticDualChartSlide; diff --git a/servers/nextjs/presentation-templates/professional/StatisticSlide.tsx b/servers/nextjs/presentation-templates/professional/StatisticSlide.tsx deleted file mode 100644 index 74bddd34..00000000 --- a/servers/nextjs/presentation-templates/professional/StatisticSlide.tsx +++ /dev/null @@ -1,301 +0,0 @@ -import React from "react"; -import * as z from "zod"; -import { ImageSchema, IconSchema } from "../defaultSchemes"; -import { - ChartContainer, - ChartTooltip, - ChartTooltipContent, -} from "@/components/ui/chart"; -import { LineChart, Line, XAxis, YAxis, CartesianGrid } from "recharts"; - -export const layoutName = "Statistic Slide"; -export const layoutId = "statistic-slide"; -export const layoutDescription = "A slide with a statistic"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("KEY STATISTICS").meta({ - description: - "Main section heading - adapt to presentation topic (e.g., 'Climate Data', 'Health Metrics', 'Performance Stats', 'Research Findings')", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("DATA-DRIVEN INSIGHTS AND PERFORMANCE") - .meta({ - description: - "Supporting subtitle that frames the data - adapt to topic (e.g., 'Global Temperature Trends and Impact', 'Patient Outcomes and Recovery Rates', 'Student Achievement and Progress')", - }), - - statisticValue: z.string().min(1).max(15).default("85%").meta({ - description: - "CRITICAL: Provide the most important statistic for the topic. For global warming: '1.1°C', '+2.1°C', '410ppm', '33%'. For healthcare: '95%', '72 hours', '89%'. For education: '78%', '3.2 GPA', '92%'. Use real, impactful numbers relevant to the presentation topic.", - }), - - statisticLabel: z - .string() - .min(5) - .max(40) - .default("Client Satisfaction Rate") - .meta({ - description: - "IMPORTANT: Provide topic-specific label for the main statistic. For global warming: 'Global Temperature Rise Since 1880', 'CO2 Concentration Increase', 'Arctic Ice Loss Rate'. For healthcare: 'Patient Recovery Rate', 'Treatment Success Rate', 'Early Detection Rate'. For education: 'Graduation Success Rate', 'Student Engagement Level', 'Learning Improvement Rate'.", - }), - - supportingVisual: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1460925895917-afdab827c52f?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Business analytics dashboard with charts and data visualization", - }).meta({ - description: - "ADAPT the image prompt to match the presentation topic: For global warming: 'Climate monitoring station with temperature sensors and weather equipment', 'Scientists analyzing ice core data in Arctic research facility'. For healthcare: 'Medical monitoring equipment displaying patient vital signs', 'Healthcare analytics dashboard showing treatment outcomes'. For education: 'Educational assessment data on computer screens', 'Students using digital learning platforms'.", - }), - - bulletPoints: z - .array(z.string().min(10).max(100)) - .min(2) - .max(5) - .default([ - "Consistent performance improvement over 12 months", - "High customer retention and satisfaction scores", - "Measurable ROI across all key performance indicators", - "Data-driven decision making and strategic optimization", - ]) - .meta({ - description: - "ESSENTIAL: Provide topic-relevant supporting facts and insights. For global warming: 'Global average temperature has risen 1.1°C since pre-industrial times', 'Arctic sea ice is declining at 13% per decade', 'CO2 levels are highest in 3 million years', 'Renewable energy adoption increased 85% in last decade'. For healthcare: 'Early detection improves survival rates by 85%', 'Telemedicine reduced patient wait times by 60%', 'Preventive care decreased hospital readmissions by 40%'. Always provide factual, verifiable statements related to the presentation topic.", - }), - - chartData: z - .array( - z.object({ - name: z.string(), - series1: z.number(), - series2: z.number(), - series3: z.number(), - }) - ) - .min(5) - .max(5) - .default([ - { name: "Jan", series1: 18, series2: 0, series3: 0 }, - { name: "Feb", series1: 30, series2: 12, series3: 8 }, - { name: "Mar", series1: 26, series2: 38, series3: 20 }, - { name: "Apr", series1: 40, series2: 30, series3: 35 }, - { name: "May", series1: 42, series2: 45, series3: 32 }, - ]) - .meta({ - description: - "CRITICAL: Provide topic-specific time-series data for line chart. For global warming: Monthly temperature anomalies, CO2 levels, ice coverage data with realistic values. For healthcare: Patient recovery rates, treatment success metrics, diagnostic accuracy over time. For education: Student performance trends, learning progress, engagement metrics. Use realistic data patterns showing meaningful trends.", - }), - - showYellowUnderline: z.boolean().default(true).meta({ - description: "Whether to display the decorative yellow underline accent", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), -}); - -// Chart configuration -const chartConfig = { - series1: { - label: "Series 1", - color: "#1D9A8A", - }, - series2: { - label: "Series 2", - color: "#A8C97F", - }, - series3: { - label: "Series 3", - color: "#E8F4B8", - }, -}; - -// Type inference -type SchemaType = z.infer; - -// Component definition -const StatisticSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - statisticValue, - statisticLabel, - supportingVisual, - bulletPoints, - chartData, - showYellowUnderline, - showVisualAccents, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Teal Background */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} - - {/* Yellow Decorative Underline */} - {showYellowUnderline && ( -
- )} -
- - {/* Large Statistic Display */} -
- {statisticValue && ( -
- {statisticValue} -
- )} - {statisticLabel && ( -

{statisticLabel}

- )} -
- - {/* Business Image */} - {supportingVisual?.__image_url__ && ( -
-
- {supportingVisual.__image_prompt__} -
-
- )} - - {/* Visual Accents */} - {showVisualAccents && ( - <> -
-
- - )} -
- - {/* Right Side - White Background with Chart and Bullet Points */} -
- {/* Chart Section */} -
- {/* Chart Legend */} -
-
-
- Series 1 -
-
-
- Series 2 -
-
-
- Series 3 -
-
- - {/* Chart Container */} - {chartData && chartData.length > 0 && ( -
- - - - - - } /> - - - - - -
- )} -
- - {/* Bullet Points Section */} -
- {bulletPoints && bulletPoints.length > 0 && ( - <> - {bulletPoints.map((point, index) => { - // Rotate colors for visual variety - const colors = [ - "bg-teal-600", - "bg-yellow-300", - "bg-gray-400", - ]; - const dotColor = colors[index % colors.length]; - - return ( -
-
-

- {point} -

-
- ); - })} - - )} -
-
-
- - {/* Bottom accent strip */} -
-
- ); -}; - -export default StatisticSlide; diff --git a/servers/nextjs/presentation-templates/professional/TableOfContentsSlide.tsx b/servers/nextjs/presentation-templates/professional/TableOfContentsSlide.tsx deleted file mode 100644 index b98d4e80..00000000 --- a/servers/nextjs/presentation-templates/professional/TableOfContentsSlide.tsx +++ /dev/null @@ -1,197 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Table of Contents Slide"; -export const layoutId = "table-of-contents-slide"; -export const layoutDescription = "A slide with a table of contents"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("TABLE OF CONTENTS").meta({ - description: - "Main heading for the content overview - can be 'Agenda', 'Overview', 'Contents', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("PRESENTATION OVERVIEW AND AGENDA") - .meta({ - description: - "Supporting subtitle that explains what the audience will learn or see", - }), - - contentItems: z - .array( - z.object({ - itemNumber: z.string().min(1).max(3), - contentTitle: z.string().min(3).max(40), - contentDescription: z.string().min(10).max(100).optional(), - }) - ) - .min(3) - .max(8) - .default([ - { - itemNumber: "01", - contentTitle: "Introduction & Welcome", - contentDescription: "Brief overview and objectives", - }, - { - itemNumber: "02", - contentTitle: "About Our Organization", - contentDescription: "Background and mission", - }, - { - itemNumber: "03", - contentTitle: "Key Challenges", - contentDescription: "Current issues and opportunities", - }, - { - itemNumber: "04", - contentTitle: "Our Solutions", - contentDescription: "Proposed approaches and methods", - }, - { - itemNumber: "05", - contentTitle: "Implementation Plan", - contentDescription: "Timeline and next steps", - }, - { - itemNumber: "06", - contentTitle: "Questions & Discussion", - contentDescription: "Interactive engagement", - }, - ]) - .meta({ - description: - "List of presentation sections with numbered sequence and brief descriptions", - }), - - brandingVisual: ImageSchema.default({ - __image_url__: - "https://via.placeholder.com/200x100/22C55E/FFFFFF?text=BRAND", - __image_prompt__: "Organization logo or brand visual element", - }).meta({ - description: - "Logo or branding element displayed prominently for visual identity", - }), - - showDecorations: z.boolean().default(true).meta({ - description: - "Whether to display decorative visual elements like underlines and accents", - }), - - useColumnLayout: z.boolean().default(true).meta({ - description: - "Whether to arrange content items in two columns for better space utilization", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const TableOfContentsSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - contentItems, - brandingVisual, - showDecorations, - useColumnLayout, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {/* Decorative underline */} - {showDecorations && ( -
- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} -
- - {/* Content Items */} - {contentItems && contentItems.length > 0 && ( -
- {contentItems.map((item, index) => ( -
- {/* Number Circle */} -
- - {item.itemNumber} - -
- - {/* Content */} -
-

- {item.contentTitle} -

- {item.contentDescription && ( -

- {item.contentDescription} -

- )} -
-
- ))} -
- )} -
- - {/* Right Side - Branding and Visual Elements */} -
- {/* Branding Visual */} - {brandingVisual?.__image_url__ && ( -
- {brandingVisual.__image_prompt__} -
- )} - - {/* Decorative Elements */} - {showDecorations && ( - <> - {/* Decorative circles */} -
-
-
- - )} -
-
- - {/* Bottom accent strip */} -
-
- ); -}; - -export default TableOfContentsSlide; diff --git a/servers/nextjs/presentation-templates/professional/TestimonialSlide.tsx b/servers/nextjs/presentation-templates/professional/TestimonialSlide.tsx deleted file mode 100644 index 3dfe7365..00000000 --- a/servers/nextjs/presentation-templates/professional/TestimonialSlide.tsx +++ /dev/null @@ -1,221 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Testimonial Slide"; -export const layoutId = "testimonial-slide"; -export const layoutDescription = "A slide with a testimonial"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("CLIENT TESTIMONIALS").meta({ - description: - "Main section heading - can be 'Testimonials', 'Client Feedback', 'Reviews', or similar", - }), - - organizationName: z - .string() - .min(2) - .max(30) - .default("Your Organization") - .meta({ - description: "Name of the organization or entity being featured", - }), - - brandLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/22C55E/FFFFFF?text=L", - __image_prompt__: - "Professional organization logo - clean and modern design", - }).meta({ - description: "Logo or brand mark representing the organization", - }), - - testimonialItems: z - .array( - z.object({ - clientName: z.string().min(2).max(40), - clientTitle: z.string().min(5).max(60), - clientCompany: z.string().min(2).max(40), - testimonialText: z.string().min(50).max(300), - rating: z.number().min(1).max(5), - clientPhoto: ImageSchema, - }) - ) - .min(2) - .max(3) - .default([ - { - clientName: "Sarah Johnson", - clientTitle: "Chief Executive Officer", - clientCompany: "TechCorp Solutions", - testimonialText: - "Working with this team has been transformative for our business. Their expertise, dedication, and innovative approach exceeded our expectations and delivered remarkable results.", - rating: 5, - clientPhoto: { - __image_url__: - "https://images.unsplash.com/photo-1494790108755-2616b612b830?ixlib=rb-4.0.3&auto=format&fit=crop&w=400&q=80", - __image_prompt__: "Professional businesswoman headshot", - }, - }, - { - clientName: "Michael Chen", - clientTitle: "Director of Operations", - clientCompany: "Global Innovations Inc", - testimonialText: - "The level of professionalism and quality of service provided was outstanding. They understood our needs perfectly and delivered solutions that truly made a difference.", - rating: 5, - clientPhoto: { - __image_url__: - "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-4.0.3&auto=format&fit=crop&w=400&q=80", - __image_prompt__: "Professional businessman headshot", - }, - }, - { - clientName: "Emily Rodriguez", - clientTitle: "Marketing Manager", - clientCompany: "Creative Dynamics", - testimonialText: - "Exceptional service and results that spoke for themselves. The team's attention to detail and commitment to excellence made our collaboration highly successful.", - rating: 5, - clientPhoto: { - __image_url__: - "https://images.unsplash.com/photo-1580489944761-15a19d654956?ixlib=rb-4.0.3&auto=format&fit=crop&w=400&q=80", - __image_prompt__: "Professional woman headshot", - }, - }, - ]) - .meta({ - description: - "List of client testimonials with ratings, photos, and detailed feedback", - }), - - showRatings: z.boolean().default(true).meta({ - description: "Whether to display star ratings for each testimonial", - }), - - showClientPhotos: z.boolean().default(true).meta({ - description: "Whether to show client photos alongside testimonials", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const TestimonialSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - organizationName, - brandLogo, - testimonialItems, - showRatings, - showClientPhotos, - } = data; - - // Helper function to render stars - const renderStars = (rating: number) => { - return Array.from({ length: 5 }, (_, i) => ( - - - - )); - }; - - return ( -
- {/* Header Section */} -
- {/* Title */} - {sectionTitle && ( -

{sectionTitle}

- )} - - {/* Company Branding */} -
- {brandLogo?.__image_url__ && ( -
- {brandLogo.__image_prompt__} -
- )} - {organizationName && ( - - {organizationName} - - )} -
-
- - {/* Testimonials Content */} -
- {testimonialItems && testimonialItems.length > 0 && ( -
- {testimonialItems.slice(0, 3).map((item, index) => { - // Rotate background colors for visual variety - const bgColors = ["bg-yellow-100", "bg-teal-100", "bg-gray-100"]; - const bgColor = bgColors[index % bgColors.length]; - - return ( -
- {/* Stars Rating */} - {showRatings && ( -
- {renderStars(item.rating)} -
- )} - - {/* Testimonial Text */} -

- "{item.testimonialText}" -

- - {/* Client Info */} -
- {/* Client Photo */} - {showClientPhotos && item.clientPhoto?.__image_url__ && ( -
- {item.clientPhoto.__image_prompt__} -
- )} - - {/* Client Details */} -
-

- {item.clientName} -

-

- {item.clientTitle} -

-

- {item.clientCompany} -

-
-
-
- ); - })} -
- )} -
-
- ); -}; - -export default TestimonialSlide; diff --git a/servers/nextjs/presentation-templates/professional/ThankYouSlide.tsx b/servers/nextjs/presentation-templates/professional/ThankYouSlide.tsx deleted file mode 100644 index 4467b4a6..00000000 --- a/servers/nextjs/presentation-templates/professional/ThankYouSlide.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Thank You Slide"; -export const layoutId = "thank-you-slide"; -export const layoutDescription = "A slide with a thank you message"; - -// Schema definition -export const Schema = z.object({ - organizationName: z - .string() - .min(2) - .max(30) - .default("Your Organization") - .meta({ - description: "Name of the organization, company, or entity presenting", - }), - - primaryMessage: z.string().min(3).max(25).default("THANK YOU").meta({ - description: - "Main closing message - can be 'Thank You', 'Questions?', 'Let's Connect', or similar", - }), - - secondaryMessage: z - .string() - .min(5) - .max(60) - .default("FOR YOUR TIME AND ATTENTION") - .meta({ - description: - "Supporting message that completes the primary message or adds context", - }), - - brandLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/22C55E/FFFFFF?text=L", - __image_prompt__: - "Professional organization logo - clean and modern design", - }).meta({ - description: "Logo or brand mark representing the presenting organization", - }), - - contactDetails: z - .object({ - phoneNumber: z.string().min(10).max(20).default("+1-234-567-8900"), - physicalAddress: z - .string() - .min(10) - .max(60) - .default("123 Business Ave, City, State 12345"), - websiteUrl: z - .string() - .min(10) - .max(40) - .default("www.yourorganization.com"), - }) - .default({ - phoneNumber: "+1-234-567-8900", - physicalAddress: "123 Business Ave, City, State 12345", - websiteUrl: "www.yourorganization.com", - }) - .meta({ - description: - "Contact information for follow-up communication and connection", - }), - - presentationDate: z - .string() - .min(3) - .max(20) - .default("Current Month Year") - .meta({ - description: - "Date when the presentation was given or document was created", - }), - - showDecorations: z.boolean().default(true).meta({ - description: - "Whether to display decorative visual elements like background shapes", - }), - - showNavigationArrow: z.boolean().default(true).meta({ - description: - "Whether to show a navigation arrow for interactive presentations", - }), - - showContactInfo: z.boolean().default(true).meta({ - description: "Whether to display contact information in the footer", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const ThankYouSlide = ({ data }: { data: Partial }) => { - const { - organizationName, - primaryMessage, - secondaryMessage, - brandLogo, - contactDetails, - presentationDate, - showDecorations, - showNavigationArrow, - showContactInfo, - } = data; - - return ( -
- {/* Header with Logo and Arrow */} -
- {/* Company Logo and Name */} -
- {brandLogo?.__image_url__ && ( -
- {brandLogo.__image_prompt__} -
- )} - {organizationName && ( - - {organizationName} - - )} -
- - {/* Arrow Button */} - {showNavigationArrow && ( -
- - - -
- )} -
- - {/* Decorative Circle */} - {showDecorations && ( -
- )} - - {/* Main Content */} -
-
- {/* Main Title */} - {primaryMessage && ( -

- {primaryMessage} -

- )} - - {/* Subtitle with Circle Bullet */} - {secondaryMessage && ( -
-
-

- {secondaryMessage} -

-
- )} -
-
- - {/* Footer with Contact Info */} - {showContactInfo && ( -
-
-
- {/* Telephone */} - {contactDetails?.phoneNumber && ( -
-
- Telephone -
-
{contactDetails.phoneNumber}
-
- )} - - {/* Address */} - {contactDetails?.physicalAddress && ( -
-
- Address -
-
{contactDetails.physicalAddress}
-
- )} - - {/* Website */} - {contactDetails?.websiteUrl && ( -
-
- Website -
-
{contactDetails.websiteUrl}
-
- )} -
- - {/* Presentation Date */} - {presentationDate && ( -
-
- {presentationDate} -
-
- )} -
-
- )} -
- ); -}; - -export default ThankYouSlide; diff --git a/servers/nextjs/presentation-templates/professional/TitleSlide.tsx b/servers/nextjs/presentation-templates/professional/TitleSlide.tsx deleted file mode 100644 index 943c1dd6..00000000 --- a/servers/nextjs/presentation-templates/professional/TitleSlide.tsx +++ /dev/null @@ -1,217 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "Title Slide"; -export const layoutId = "title-slide"; -export const layoutDescription = "A slide with a title and subtitle"; - -// Schema definition -export const Schema = z.object({ - organizationName: z - .string() - .min(2) - .max(25) - .default("Your Organization") - .meta({ - description: "Name of the organization, company, or entity presenting", - }), - - primaryTitle: z.string().min(3).max(30).default("PRESENTATION TITLE").meta({ - description: - "Main headline or title for the presentation - should be impactful and attention-grabbing", - }), - - secondaryTitle: z - .string() - .min(5) - .max(50) - .default("PROFESSIONAL PRESENTATION") - .meta({ - description: - "Subtitle that provides context about the presentation type or purpose", - }), - - brandLogo: ImageSchema.default({ - __image_url__: "https://via.placeholder.com/40x40/22C55E/FFFFFF?text=L", - __image_prompt__: - "Professional organization logo - clean and modern design", - }).meta({ - description: "Logo or brand mark representing the presenting organization", - }), - - contactDetails: z - .object({ - phoneNumber: z.string().min(10).max(20).default("+1-234-567-8900"), - physicalAddress: z - .string() - .min(10) - .max(60) - .default("123 Business Ave, City, State 12345"), - websiteUrl: z - .string() - .min(10) - .max(40) - .default("www.yourorganization.com"), - }) - .default({ - phoneNumber: "+1-234-567-8900", - physicalAddress: "123 Business Ave, City, State 12345", - websiteUrl: "www.yourorganization.com", - }) - .meta({ - description: - "Contact information including phone, address, and website for follow-up communication", - }), - - presentationDate: z - .string() - .min(3) - .max(20) - .default("Current Month Year") - .meta({ - description: "Date when the presentation is being given or was created", - }), - - showDecorations: z.boolean().default(true).meta({ - description: - "Whether to display decorative visual elements like background shapes", - }), - - showNavigationArrow: z.boolean().default(true).meta({ - description: - "Whether to show a navigation arrow button for presentation flow", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const ThynkTitleSlide = ({ data }: { data: Partial }) => { - const { - organizationName, - primaryTitle, - secondaryTitle, - brandLogo, - contactDetails, - presentationDate, - showDecorations, - showNavigationArrow, - } = data; - - return ( -
- {/* Header with Logo and Arrow */} -
- {/* Company Logo and Name */} -
- {brandLogo?.__image_url__ && ( -
- {brandLogo.__image_prompt__} -
- )} - {organizationName && ( - - {organizationName} - - )} -
- - {/* Arrow Button */} - {showNavigationArrow && ( -
- - - -
- )} -
- - {/* Decorative Circle */} - {showDecorations && ( -
- )} - - {/* Main Content */} -
-
- {/* Main Title */} - {primaryTitle && ( -

- {primaryTitle} -

- )} - - {/* Subtitle with Circle Bullet */} - {secondaryTitle && ( -
-
-

- {secondaryTitle} -

-
- )} -
-
- - {/* Footer with Contact Info */} -
-
-
- {/* Telephone */} - {contactDetails?.phoneNumber && ( -
-
- Telephone -
-
{contactDetails.phoneNumber}
-
- )} - - {/* Address */} - {contactDetails?.physicalAddress && ( -
-
Address
-
{contactDetails.physicalAddress}
-
- )} - - {/* Website */} - {contactDetails?.websiteUrl && ( -
-
Website
-
{contactDetails.websiteUrl}
-
- )} -
- - {/* Presentation Date */} - {presentationDate && ( -
-
- {presentationDate} -
-
- )} -
-
-
- ); -}; - -export default ThynkTitleSlide; diff --git a/servers/nextjs/presentation-templates/professional/WhatWeBelieveSlide.tsx b/servers/nextjs/presentation-templates/professional/WhatWeBelieveSlide.tsx deleted file mode 100644 index 8d6b4f67..00000000 --- a/servers/nextjs/presentation-templates/professional/WhatWeBelieveSlide.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import * as z from "zod"; - -import { ImageSchema, IconSchema } from "../defaultSchemes"; - -export const layoutName = "What We Believe Slide"; -export const layoutId = "what-we-believe-slide"; -export const layoutDescription = - "A slide that describes the organization's vision and mission"; - -// Schema definition -export const Schema = z.object({ - sectionTitle: z.string().min(3).max(30).default("OUR VISION & MISSION").meta({ - description: - "Main section heading - can be 'Our Values', 'What We Believe', 'Our Philosophy', or similar", - }), - - sectionSubtitle: z - .string() - .min(10) - .max(60) - .default("GUIDING PRINCIPLES AND CORE BELIEFS") - .meta({ - description: - "Supporting subtitle that introduces the organization's foundational concepts", - }), - - visionStatement: z - .string() - .min(30) - .max(200) - .default( - "We envision a future where innovative solutions transform challenges into opportunities, creating sustainable value for all stakeholders." - ) - .meta({ - description: - "Vision statement describing the organization's aspirational future goals and impact", - }), - - missionContent: z - .object({ - missionTitle: z.string().min(3).max(30).default("Our Mission"), - missionDescription: z - .string() - .min(50) - .max(300) - .default( - "To deliver exceptional value through strategic innovation, collaborative partnerships, and unwavering commitment to excellence. We believe in empowering organizations with the tools, insights, and support needed to achieve sustainable growth and meaningful impact in their communities." - ), - }) - .default({ - missionTitle: "Our Mission", - missionDescription: - "To deliver exceptional value through strategic innovation, collaborative partnerships, and unwavering commitment to excellence. We believe in empowering organizations with the tools, insights, and support needed to achieve sustainable growth and meaningful impact in their communities.", - }) - .meta({ - description: - "Mission section with title and detailed description of organizational purpose and approach", - }), - - supportingVisual: ImageSchema.default({ - __image_url__: - "https://images.unsplash.com/photo-1522202176988-66273c2fd55f?ixlib=rb-4.0.3&auto=format&fit=crop&w=800&q=80", - __image_prompt__: - "Diverse team collaborating and planning together in modern workspace", - }).meta({ - description: - "Visual that represents collaboration, vision, or organizational culture", - }), - - showVisualAccents: z.boolean().default(true).meta({ - description: "Whether to display decorative visual accent elements", - }), - - showColorBlocks: z.boolean().default(true).meta({ - description: - "Whether to show colored background sections for visual hierarchy", - }), -}); - -// Type inference -type SchemaType = z.infer; - -// Component definition -const WhatWeBelieveSlide = ({ data }: { data: Partial }) => { - const { - sectionTitle, - sectionSubtitle, - visionStatement, - missionContent, - supportingVisual, - showVisualAccents, - showColorBlocks, - } = data; - - return ( -
- {/* Main Content Area */} -
- {/* Left Side - Image */} -
- {supportingVisual?.__image_url__ && ( -
- {supportingVisual.__image_prompt__} -
- )} - - {/* Visual Accents */} - {showVisualAccents && ( - <> - {/* Decorative circles */} -
-
- - )} -
- - {/* Right Side - Content */} -
- {/* Title Section */} -
- {sectionTitle && ( -

- {sectionTitle} -

- )} - - {sectionSubtitle && ( -

- {sectionSubtitle} -

- )} -
- - {/* Vision Section */} - {visionStatement && ( -
-

Vision

-

- {visionStatement} -

-
- )} - - {/* Mission Section with Teal Background */} - {missionContent && ( -
- {missionContent.missionTitle && ( -

- {missionContent.missionTitle} -

- )} - {missionContent.missionDescription && ( -

- {missionContent.missionDescription} -

- )} -
- )} -
-
- - {/* Color blocks for visual hierarchy */} - {showColorBlocks && ( - <> - {/* Bottom accent strip */} -
- {/* Left accent */} -
- - )} -
- ); -}; - -export default WhatWeBelieveSlide; diff --git a/servers/nextjs/presentation-templates/professional/settings.json b/servers/nextjs/presentation-templates/professional/settings.json deleted file mode 100644 index 4eeda989..00000000 --- a/servers/nextjs/presentation-templates/professional/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "description": "Professional presentation layouts with clean design and flexible content fields. Suitable for business pitches, organizational overviews, product presentations, and various corporate communications.", - "ordered": false, - "default": false -} \ No newline at end of file