UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio

348 lines (347 loc) 10.7 kB
/** * Slide Renderers * * Standalone render functions for each slide type. * Extracted from SlideGenerator to keep functions under 300 lines. * * @module presentation/slideRenderers */ import type { BackgroundStyle, BulletPoint, ColumnData, PptxChartName, PptxSlide, PresentationTheme, RenderContentSlideOptions, SlideContent, SlideLayout, SlideType } from "../../types/index.js"; export declare const LAYOUT_POSITIONS: { margin: { x: number; y: number; }; title: { x: number; y: number; w: number; h: number; }; subtitle: { x: number; y: number; w: number; h: number; }; content: { x: number; y: number; w: number; h: number; }; contentFull: { x: number; y: number; w: number; h: number; }; contentLeft: { x: number; y: number; w: number; h: number; }; contentRight: { x: number; y: number; w: number; h: number; }; imageRight: { x: number; y: number; w: number; h: number; }; imageLeft: { x: number; y: number; w: number; h: number; }; imageFull: { x: number; y: number; w: number; h: number; }; imageCentered: { x: number; y: number; w: number; h: number; }; columnLeft: { x: number; y: number; w: number; h: number; }; columnRight: { x: number; y: number; w: number; h: number; }; col1: { x: number; y: number; w: number; h: number; }; col2: { x: number; y: number; w: number; h: number; }; col3: { x: number; y: number; w: number; h: number; }; chart: { x: number; y: number; w: number; h: number; }; statRow: { y: number; h: number; }; footer: { x: number; y: number; w: number; h: number; }; logo: { "top-left": { x: number; y: number; }; "top-right": { x: number; y: number; }; "bottom-left": { x: number; y: number; }; "bottom-right": { x: number; y: number; }; }; quote: { x: number; y: number; w: number; h: number; }; quoteAuthor: { x: number; y: number; w: number; h: number; }; }; /** * Add enhanced background with gradient or multi-color designs * Creates visually appealing slides with sophisticated styling */ export declare function addEnhancedBackground(slide: PptxSlide, theme: PresentationTheme, style?: BackgroundStyle): void; /** * Add subtle colored background to slides (legacy - use addEnhancedBackground for more options) */ export declare function addColoredBackground(slide: PptxSlide, theme: PresentationTheme, opacity?: number): void; /** * Add modern card-style container with border */ export declare function addCardContainer(slide: PptxSlide, pos: { x: number; y: number; w: number; h: number; }, theme: PresentationTheme, borderWidth?: number): void; /** * Add accent bar for visual hierarchy */ export declare function addAccentBar(slide: PptxSlide, pos: { x: number; y: number; w: number; h: number; }, theme: PresentationTheme, position?: "left" | "top" | "bottom"): void; /** * Calculate text width in inches based on font size and character count. * Uses typographic metrics for Arial font family. * * @param text - The text string to measure * @param fontSize - Font size in points * @param isBold - Whether the text is bold (adds ~10% width) * @returns Width in inches */ export declare function calculateTextWidth(text: string, fontSize: number, isBold?: boolean): number; export declare function addTitle(slide: PptxSlide, title: string, theme: PresentationTheme, showUnderline?: boolean): void; /** * Add individual bullet items (each as separate text element) * This creates cleaner spacing and no bounding box around bullets * Useful for column layouts and when you want more control over spacing */ export declare function addIndividualBullets(options: { slide: PptxSlide; bullets: BulletPoint[]; startX: number; startY: number; width: number; theme: PresentationTheme; itemSpacing?: number; }): void; /** * Add bullets to a slide with hybrid formatting * * Priority: bullet-level > slide-level > type-defaults > theme-defaults * * @param slide - The pptxgenjs slide * @param bullets - Array of bullet points (normalized) * @param pos - Position and dimensions * @param theme - Presentation theme * @param slideType - Slide type for default formatting (optional) */ export declare function addBullets(slide: PptxSlide, bullets: BulletPoint[], pos: { x: number; y: number; w: number; h: number; }, theme: PresentationTheme, slideType?: SlideType, options?: { useIndividualBullets?: boolean; itemSpacing?: number; }): void; export declare function addImage(slide: PptxSlide, imageBuffer: Buffer, pos: { x: number; y: number; w: number; h: number; }): void; export declare function getPptxChartType(slideType: SlideType): PptxChartName; export declare function renderTitleSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme, imageBuffer?: Buffer): void; export declare function renderSectionHeaderSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderThankYouSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme, imageBuffer?: Buffer): void; export declare function renderContentSlide(options: RenderContentSlideOptions): void; export declare function renderImageSlide(slide: PptxSlide, title: string, content: SlideContent, layout: SlideLayout, theme: PresentationTheme, imageBuffer?: Buffer): void; /** * Generic column slide renderer * Handles 2, 3, or more columns dynamically * Renders each bullet as separate element (comparison-style) */ export declare function renderColumnSlide(slide: PptxSlide, title: string, columns: ColumnData[], theme: PresentationTheme, options?: { headerY?: number; headerHeight?: number; bulletsStartY?: number; columnGap?: number; highlightFirstColumn?: boolean; }): void; export declare function renderTwoColumnSlide(slide: PptxSlide, title: string, content: SlideContent, layout: SlideLayout, theme: PresentationTheme, imageBuffer?: Buffer): void; export declare function renderThreeColumnSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderQuoteSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderStatisticsSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderChartSlide(slide: PptxSlide, title: string, content: SlideContent, chartType: SlideType, theme: PresentationTheme): void; export declare function renderTableSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderTimelineSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderProcessFlowSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderComparisonSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderFeaturesSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderTeamSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; export declare function renderConclusionSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; /** * Predefined grid layouts for composite slides */ export declare const COMPOSITE_LAYOUTS: { "left-right": { x: number; y: number; w: number; h: number; }[]; "top-bottom": { x: number; y: number; w: number; h: number; }[]; "three-cols": { x: number; y: number; w: number; h: number; }[]; quadrants: { x: number; y: number; w: number; h: number; }[]; "five-boxes": { x: number; y: number; w: number; h: number; }[]; "six-boxes": { x: number; y: number; w: number; h: number; }[]; "main-sidebar": { x: number; y: number; w: number; h: number; }[]; "top-three": { x: number; y: number; w: number; h: number; }[]; }; /** * Render a composite/dashboard slide with multiple content zones * * @example * // Left: bullets, Right: chart * renderDashboardSlide(slide, "Overview", { * layout: "left-right", * zones: [ * { type: "bullets", title: "Key Points", data: bullets }, * { type: "chart", title: "Trend", data: chartData } * ] * }, theme); */ export declare function renderDashboardSlide(slide: PptxSlide, title: string, content: { layout: keyof typeof COMPOSITE_LAYOUTS; zones: Array<{ type: "bullets" | "chart" | "stats" | "icon-box" | "text-box"; title?: string; data?: unknown; isPrimary?: boolean; }>; }, theme: PresentationTheme): void; /** * Render a mixed content slide with left bullets and right chart * Common pattern: explanation on left, visualization on right */ export declare function renderMixedContentSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; /** * Render a stats grid slide with multiple stat boxes */ export declare function renderStatsGridSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void; /** * Render an icon grid slide with multiple icon boxes */ export declare function renderIconGridSlide(slide: PptxSlide, title: string, content: SlideContent, theme: PresentationTheme): void;