claude-presentation-master 8.0.0 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
@@ -20,7 +20,7 @@ const args = process.argv.slice(2);
20
20
 
21
21
  // Help text
22
22
  const helpText = `
23
- Claude Presentation Master v7.2.0
23
+ Claude Presentation Master v8.1.0
24
24
  Generate world-class presentations using expert methodologies
25
25
 
26
26
  100% FREE • Zero API Keys • Runs Locally • KB-Driven Quality
@@ -30,11 +30,16 @@ USAGE:
30
30
  cpm <command> [options]
31
31
 
32
32
  COMMANDS:
33
- generate <input> Generate presentation from input file
33
+ generate [input] Generate presentation (auto-detects file if omitted)
34
34
  validate <file> Validate an existing HTML presentation
35
35
  visual-qa <file> Run HIGH-LEVEL visual quality evaluation (Playwright)
36
36
  info Show package information
37
37
 
38
+ AUTO-DETECTION:
39
+ If no input file is specified, the CLI scans your current directory for:
40
+ - Priority files: README.md, content.md, presentation.md, slides.md, pitch.md
41
+ - Any .md, .txt, .json, .yaml file
42
+
38
43
  OPTIONS:
39
44
  -o, --output <dir> Output directory (default: ./output)
40
45
  -m, --mode <mode> Presentation mode: keynote or business (default: keynote)
@@ -55,17 +60,20 @@ OPTIONS:
55
60
  -v, --version Show version number
56
61
 
57
62
  EXAMPLES:
58
- # Quick one-off: Generate keynote from markdown (npx - no install needed)
63
+ # Auto-detect content in current directory
64
+ npx claude-presentation-master generate
65
+
66
+ # Or specify a file
59
67
  npx claude-presentation-master generate notes.md -m keynote -f html
60
68
 
61
69
  # Generate consulting deck as PowerPoint
62
70
  cpm generate strategy.md -m business --type consulting_deck -f pptx
63
71
 
64
72
  # Investment banking pitchbook
65
- cpm generate deal-memo.md --type investment_banking -f pptx -o ./pitchbook
73
+ cpm generate --type investment_banking -f pptx -o ./pitchbook
66
74
 
67
75
  # Generate both formats
68
- cpm generate quarterly-review.md -m business -f html,pptx -o ./slides
76
+ cpm generate -f html,pptx -o ./slides
69
77
 
70
78
  # Validate an existing presentation
71
79
  cpm validate output/presentation.html -m keynote
@@ -89,7 +97,7 @@ For more information: https://github.com/Stuinfla/claude-presentation-master
89
97
  `;
90
98
 
91
99
  // Version
92
- const version = '7.2.0';
100
+ const version = '8.1.0';
93
101
 
94
102
  // Parse arguments
95
103
  function parseArgs(args) {
@@ -194,6 +202,49 @@ function parseArgs(args) {
194
202
  return options;
195
203
  }
196
204
 
205
+ /**
206
+ * Auto-detect a content file in the given directory.
207
+ * Prioritizes: README.md, content.md, presentation.md, then any .md, .txt, .json, .yaml
208
+ */
209
+ function autoDetectContentFile(directory) {
210
+ const contentExtensions = ['.md', '.markdown', '.txt', '.json', '.yaml', '.yml'];
211
+ const priorityFiles = [
212
+ 'README.md', 'readme.md',
213
+ 'content.md', 'Content.md',
214
+ 'presentation.md', 'Presentation.md',
215
+ 'slides.md', 'Slides.md',
216
+ 'pitch.md', 'Pitch.md',
217
+ 'deck.md', 'Deck.md'
218
+ ];
219
+
220
+ // First, check for priority files
221
+ for (const file of priorityFiles) {
222
+ const filePath = join(directory, file);
223
+ if (existsSync(filePath)) {
224
+ return file;
225
+ }
226
+ }
227
+
228
+ // Then scan for any content file
229
+ try {
230
+ const files = readdirSync(directory);
231
+ for (const file of files) {
232
+ const ext = extname(file).toLowerCase();
233
+ if (contentExtensions.includes(ext)) {
234
+ // Skip node_modules, hidden files, package files
235
+ if (file.startsWith('.') || file.startsWith('_')) continue;
236
+ if (file === 'package.json' || file === 'package-lock.json') continue;
237
+ if (file === 'tsconfig.json' || file === 'jest.config.js') continue;
238
+ return file;
239
+ }
240
+ }
241
+ } catch (e) {
242
+ // Directory not readable
243
+ }
244
+
245
+ return null;
246
+ }
247
+
197
248
  // Determine content type from file extension
198
249
  function getContentType(filename) {
199
250
  const ext = extname(filename).toLowerCase();
@@ -293,8 +344,19 @@ Usage:
293
344
  process.exit(1);
294
345
  }
295
346
 
296
- // Validate input
297
- if (!options.input) {
347
+ // Auto-detect input file if not specified
348
+ if (!options.input && options.command === 'generate') {
349
+ const detected = autoDetectContentFile(process.cwd());
350
+ if (detected) {
351
+ options.input = detected;
352
+ console.log(`📁 Auto-detected: ${detected}`);
353
+ } else {
354
+ console.error(`Error: No content file found in current directory.`);
355
+ console.error(`Looked for: *.md, *.txt, *.json, *.yaml, *.yml`);
356
+ console.error(`\nEither create a content file or specify one: cpm generate <file>`);
357
+ process.exit(1);
358
+ }
359
+ } else if (!options.input) {
298
360
  console.error(`Error: No input file specified for "${options.command}" command.`);
299
361
  process.exit(1);
300
362
  }
package/dist/index.d.mts CHANGED
@@ -127,6 +127,26 @@ interface QAResults {
127
127
  passed: boolean;
128
128
  /** List of issues found */
129
129
  issues: QAIssue[];
130
+ /** Per-slide scores from visual QA */
131
+ slideScores?: SlideScore[];
132
+ /** Overall QA score */
133
+ score?: number;
134
+ /** QA status */
135
+ status?: string;
136
+ }
137
+ interface SlideScore {
138
+ /** Slide index */
139
+ index: number;
140
+ /** Slide type */
141
+ type: string;
142
+ /** Score 0-100 */
143
+ score: number;
144
+ /** Expert verdict */
145
+ expertVerdict?: string;
146
+ /** Critical issues found */
147
+ criticalIssues?: string[];
148
+ /** All issues */
149
+ issues?: QAIssue[];
130
150
  }
131
151
  interface VisualQAResults {
132
152
  /** Whitespace percentage (target: 35%+ keynote, 25%+ business) */
@@ -391,19 +411,28 @@ interface SparklineStructure {
391
411
  }
392
412
  declare class ValidationError extends Error {
393
413
  errors: string[];
414
+ readonly suggestions: string[];
394
415
  constructor(errors: string[], message?: string);
416
+ private static getSuggestions;
395
417
  }
396
418
  declare class QAFailureError extends Error {
397
419
  score: number;
398
420
  threshold: number;
399
421
  qaResults: QAResults;
422
+ readonly topIssues: string[];
400
423
  constructor(score: number, threshold: number, qaResults: QAResults, message?: string);
401
424
  getIssues(): string[];
425
+ private static getTopIssues;
402
426
  }
403
427
  declare class TemplateNotFoundError extends Error {
404
428
  templatePath: string;
405
429
  constructor(templatePath: string, message?: string);
406
430
  }
431
+ declare class KnowledgeBaseError extends Error {
432
+ field: string;
433
+ context: string;
434
+ constructor(field: string, context: string, message?: string);
435
+ }
407
436
  /**
408
437
  * Content pattern detected from a section
409
438
  * Used to match content to appropriate slide types
@@ -1579,22 +1608,48 @@ declare class QAEngine {
1579
1608
  }
1580
1609
 
1581
1610
  /**
1582
- * VisualQualityEvaluator - Evaluates presentations like a human expert.
1611
+ * VisualQualityEvaluator - EXPERT-LEVEL Presentation Evaluation
1612
+ *
1613
+ * THIS IS NOT A LINTER. This evaluates like a world-class presentation coach:
1583
1614
  *
1584
- * THIS IS NOT A LINTER. This evaluates:
1585
- * - Is this slide visually compelling?
1586
- * - Does the presentation tell a coherent story?
1587
- * - Would an executive be impressed?
1588
- * - Does it look like McKinsey made it?
1615
+ * EXPERT PRINCIPLES APPLIED:
1616
+ * 1. Nancy Duarte's Glance Test - Can you understand each slide in 3 seconds?
1617
+ * 2. Chris Anderson's One Idea Rule - Does each slide communicate ONE message?
1618
+ * 3. Edward Tufte's Data-Ink Ratio - Does every element serve a purpose?
1619
+ * 4. Barbara Minto's Pyramid Principle - Is the answer first, then support?
1620
+ * 5. Garr Reynolds' Signal to Noise - Is decoration minimized?
1621
+ * 6. Carmine Gallo's Rule of Three - Are key points structured effectively?
1622
+ * 7. Cole Knaflic's Context First - Does data have proper context?
1589
1623
  *
1590
- * Uses Playwright to render and screenshot each slide, then evaluates
1591
- * the ACTUAL visual output, not just data structures.
1624
+ * WHAT EXPERTS WOULD CHECK:
1625
+ * - Does the deck accomplish its purpose? (Persuade, inform, inspire)
1626
+ * - Does the narrative hang together? (Story arc, tension, resolution)
1627
+ * - Is each slide communicative? (Message clear in 3 seconds)
1628
+ * - Are visuals used intelligently? (Supporting message, not decorating)
1629
+ * - Is typography/layout professional? (Hierarchy, spacing, balance)
1630
+ * - Would McKinsey show this to a Fortune 500 CEO?
1592
1631
  *
1593
- * @version 9.0.0
1632
+ * CRITICAL VISUAL FAILURES (immediate score penalty):
1633
+ * - Truncated text (content cut off)
1634
+ * - Empty slides (missing content)
1635
+ * - Broken layouts (overflow, misalignment)
1636
+ * - Low contrast (illegible text)
1637
+ *
1638
+ * @version 10.0.0 - Expert-Driven QA
1594
1639
  */
1595
1640
  interface SlideVisualScore {
1596
1641
  slideIndex: number;
1597
1642
  slideType: string;
1643
+ glanceTest: number;
1644
+ glanceTestNotes: string;
1645
+ oneIdea: number;
1646
+ oneIdeaNotes: string;
1647
+ dataInkRatio: number;
1648
+ dataInkNotes: string;
1649
+ professionalExecution: number;
1650
+ professionalExecutionNotes: string;
1651
+ hasCriticalFailure: boolean;
1652
+ criticalFailures: string[];
1598
1653
  visualImpact: number;
1599
1654
  visualImpactNotes: string;
1600
1655
  contentClarity: number;
@@ -1660,7 +1715,17 @@ declare class VisualQualityEvaluator {
1660
1715
  private closeBrowser;
1661
1716
  private getSlideCount;
1662
1717
  private evaluateSlide;
1718
+ /**
1719
+ * EXPERT-LEVEL SLIDE SCORING
1720
+ *
1721
+ * This evaluates each slide like Nancy Duarte, Carmine Gallo, or a McKinsey partner would.
1722
+ * It's not about rules - it's about whether the slide WORKS.
1723
+ */
1663
1724
  private scoreSlide;
1725
+ /**
1726
+ * Create a failed slide score (for critical failures)
1727
+ */
1728
+ private createFailedSlideScore;
1664
1729
  private inferSlideType;
1665
1730
  private evaluateNarrativeFlow;
1666
1731
  private evaluateVisualConsistency;
@@ -2137,4 +2202,4 @@ declare const _default: {
2137
2202
  VERSION: string;
2138
2203
  };
2139
2204
 
2140
- export { type AccessibilityResults, type ChartData, type ChartDataset, ChartJsProvider, type ChartProvider, type ChartRequest, type ChartResult, type ChartType, type ColorPalette, CompositeChartProvider, CompositeImageProvider, type ContentAnalysis$1 as ContentAnalysis, ContentAnalyzer, type ContentPattern, ContentPatternClassifier, type ContentQAResults, type ContentSection$1 as ContentSection, type ContrastIssue, type ExpertQAResults, type ExpertValidation, type FontSizeIssue, type GlanceTestResult, type ImageData, type ImageProvider, type ImageRequest, type ImageResult, KnowledgeGateway, type LegacySlide, LocalImageProvider, MermaidProvider, type MetricData, type OneIdeaResult, type OutputFormat, PlaceholderImageProvider, PowerPointGenerator, type PresentationConfig, PresentationEngine, type PresentationMetadata, type PresentationMode$1 as PresentationMode, type PresentationQualityScore, type PresentationResult, type PresentationType, QAEngine, QAFailureError, type QAIssue, type QAResults, QuickChartProvider, RevealJsGenerator, type SCQAStructure, ScoreCalculator, type ScoringWeights, type SevenDimensionQAResult, type SignalNoiseResult, type Slide, type SlideContentScore, type SlideData, SlideFactory, SlideGenerator, type SlideTemplate, type SlideType, type SlideValidationResult, type SlideVisualScore, type SparklineStructure, type StoryStructure, TemplateEngine, TemplateNotFoundError, type ThemeName, type TypographyRules, UnsplashImageProvider, VERSION, ValidationError, type ValidationRules, type VisualQAResults, VisualQualityEvaluator, createDefaultChartProvider, createDefaultImageProvider, createSlideFactory, _default as default, evaluatePresentation, generate, getKnowledgeGateway, initSlideGenerator, validate };
2205
+ export { type AccessibilityResults, type ChartData, type ChartDataset, ChartJsProvider, type ChartProvider, type ChartRequest, type ChartResult, type ChartType, type ColorPalette, CompositeChartProvider, CompositeImageProvider, type ContentAnalysis$1 as ContentAnalysis, ContentAnalyzer, type ContentPattern, ContentPatternClassifier, type ContentQAResults, type ContentSection$1 as ContentSection, type ContrastIssue, type ExpertQAResults, type ExpertValidation, type FontSizeIssue, type GlanceTestResult, type ImageData, type ImageProvider, type ImageRequest, type ImageResult, KnowledgeBaseError, KnowledgeGateway, type LegacySlide, LocalImageProvider, MermaidProvider, type MetricData, type OneIdeaResult, type OutputFormat, PlaceholderImageProvider, PowerPointGenerator, type PresentationConfig, PresentationEngine, type PresentationMetadata, type PresentationMode$1 as PresentationMode, type PresentationQualityScore, type PresentationResult, type PresentationType, QAEngine, QAFailureError, type QAIssue, type QAResults, QuickChartProvider, RevealJsGenerator, type SCQAStructure, ScoreCalculator, type ScoringWeights, type SevenDimensionQAResult, type SignalNoiseResult, type Slide, type SlideContentScore, type SlideData, SlideFactory, SlideGenerator, type SlideScore, type SlideTemplate, type SlideType, type SlideValidationResult, type SlideVisualScore, type SparklineStructure, type StoryStructure, TemplateEngine, TemplateNotFoundError, type ThemeName, type TypographyRules, UnsplashImageProvider, VERSION, ValidationError, type ValidationRules, type VisualQAResults, VisualQualityEvaluator, createDefaultChartProvider, createDefaultImageProvider, createSlideFactory, _default as default, evaluatePresentation, generate, getKnowledgeGateway, initSlideGenerator, validate };
package/dist/index.d.ts CHANGED
@@ -127,6 +127,26 @@ interface QAResults {
127
127
  passed: boolean;
128
128
  /** List of issues found */
129
129
  issues: QAIssue[];
130
+ /** Per-slide scores from visual QA */
131
+ slideScores?: SlideScore[];
132
+ /** Overall QA score */
133
+ score?: number;
134
+ /** QA status */
135
+ status?: string;
136
+ }
137
+ interface SlideScore {
138
+ /** Slide index */
139
+ index: number;
140
+ /** Slide type */
141
+ type: string;
142
+ /** Score 0-100 */
143
+ score: number;
144
+ /** Expert verdict */
145
+ expertVerdict?: string;
146
+ /** Critical issues found */
147
+ criticalIssues?: string[];
148
+ /** All issues */
149
+ issues?: QAIssue[];
130
150
  }
131
151
  interface VisualQAResults {
132
152
  /** Whitespace percentage (target: 35%+ keynote, 25%+ business) */
@@ -391,19 +411,28 @@ interface SparklineStructure {
391
411
  }
392
412
  declare class ValidationError extends Error {
393
413
  errors: string[];
414
+ readonly suggestions: string[];
394
415
  constructor(errors: string[], message?: string);
416
+ private static getSuggestions;
395
417
  }
396
418
  declare class QAFailureError extends Error {
397
419
  score: number;
398
420
  threshold: number;
399
421
  qaResults: QAResults;
422
+ readonly topIssues: string[];
400
423
  constructor(score: number, threshold: number, qaResults: QAResults, message?: string);
401
424
  getIssues(): string[];
425
+ private static getTopIssues;
402
426
  }
403
427
  declare class TemplateNotFoundError extends Error {
404
428
  templatePath: string;
405
429
  constructor(templatePath: string, message?: string);
406
430
  }
431
+ declare class KnowledgeBaseError extends Error {
432
+ field: string;
433
+ context: string;
434
+ constructor(field: string, context: string, message?: string);
435
+ }
407
436
  /**
408
437
  * Content pattern detected from a section
409
438
  * Used to match content to appropriate slide types
@@ -1579,22 +1608,48 @@ declare class QAEngine {
1579
1608
  }
1580
1609
 
1581
1610
  /**
1582
- * VisualQualityEvaluator - Evaluates presentations like a human expert.
1611
+ * VisualQualityEvaluator - EXPERT-LEVEL Presentation Evaluation
1612
+ *
1613
+ * THIS IS NOT A LINTER. This evaluates like a world-class presentation coach:
1583
1614
  *
1584
- * THIS IS NOT A LINTER. This evaluates:
1585
- * - Is this slide visually compelling?
1586
- * - Does the presentation tell a coherent story?
1587
- * - Would an executive be impressed?
1588
- * - Does it look like McKinsey made it?
1615
+ * EXPERT PRINCIPLES APPLIED:
1616
+ * 1. Nancy Duarte's Glance Test - Can you understand each slide in 3 seconds?
1617
+ * 2. Chris Anderson's One Idea Rule - Does each slide communicate ONE message?
1618
+ * 3. Edward Tufte's Data-Ink Ratio - Does every element serve a purpose?
1619
+ * 4. Barbara Minto's Pyramid Principle - Is the answer first, then support?
1620
+ * 5. Garr Reynolds' Signal to Noise - Is decoration minimized?
1621
+ * 6. Carmine Gallo's Rule of Three - Are key points structured effectively?
1622
+ * 7. Cole Knaflic's Context First - Does data have proper context?
1589
1623
  *
1590
- * Uses Playwright to render and screenshot each slide, then evaluates
1591
- * the ACTUAL visual output, not just data structures.
1624
+ * WHAT EXPERTS WOULD CHECK:
1625
+ * - Does the deck accomplish its purpose? (Persuade, inform, inspire)
1626
+ * - Does the narrative hang together? (Story arc, tension, resolution)
1627
+ * - Is each slide communicative? (Message clear in 3 seconds)
1628
+ * - Are visuals used intelligently? (Supporting message, not decorating)
1629
+ * - Is typography/layout professional? (Hierarchy, spacing, balance)
1630
+ * - Would McKinsey show this to a Fortune 500 CEO?
1592
1631
  *
1593
- * @version 9.0.0
1632
+ * CRITICAL VISUAL FAILURES (immediate score penalty):
1633
+ * - Truncated text (content cut off)
1634
+ * - Empty slides (missing content)
1635
+ * - Broken layouts (overflow, misalignment)
1636
+ * - Low contrast (illegible text)
1637
+ *
1638
+ * @version 10.0.0 - Expert-Driven QA
1594
1639
  */
1595
1640
  interface SlideVisualScore {
1596
1641
  slideIndex: number;
1597
1642
  slideType: string;
1643
+ glanceTest: number;
1644
+ glanceTestNotes: string;
1645
+ oneIdea: number;
1646
+ oneIdeaNotes: string;
1647
+ dataInkRatio: number;
1648
+ dataInkNotes: string;
1649
+ professionalExecution: number;
1650
+ professionalExecutionNotes: string;
1651
+ hasCriticalFailure: boolean;
1652
+ criticalFailures: string[];
1598
1653
  visualImpact: number;
1599
1654
  visualImpactNotes: string;
1600
1655
  contentClarity: number;
@@ -1660,7 +1715,17 @@ declare class VisualQualityEvaluator {
1660
1715
  private closeBrowser;
1661
1716
  private getSlideCount;
1662
1717
  private evaluateSlide;
1718
+ /**
1719
+ * EXPERT-LEVEL SLIDE SCORING
1720
+ *
1721
+ * This evaluates each slide like Nancy Duarte, Carmine Gallo, or a McKinsey partner would.
1722
+ * It's not about rules - it's about whether the slide WORKS.
1723
+ */
1663
1724
  private scoreSlide;
1725
+ /**
1726
+ * Create a failed slide score (for critical failures)
1727
+ */
1728
+ private createFailedSlideScore;
1664
1729
  private inferSlideType;
1665
1730
  private evaluateNarrativeFlow;
1666
1731
  private evaluateVisualConsistency;
@@ -2137,4 +2202,4 @@ declare const _default: {
2137
2202
  VERSION: string;
2138
2203
  };
2139
2204
 
2140
- export { type AccessibilityResults, type ChartData, type ChartDataset, ChartJsProvider, type ChartProvider, type ChartRequest, type ChartResult, type ChartType, type ColorPalette, CompositeChartProvider, CompositeImageProvider, type ContentAnalysis$1 as ContentAnalysis, ContentAnalyzer, type ContentPattern, ContentPatternClassifier, type ContentQAResults, type ContentSection$1 as ContentSection, type ContrastIssue, type ExpertQAResults, type ExpertValidation, type FontSizeIssue, type GlanceTestResult, type ImageData, type ImageProvider, type ImageRequest, type ImageResult, KnowledgeGateway, type LegacySlide, LocalImageProvider, MermaidProvider, type MetricData, type OneIdeaResult, type OutputFormat, PlaceholderImageProvider, PowerPointGenerator, type PresentationConfig, PresentationEngine, type PresentationMetadata, type PresentationMode$1 as PresentationMode, type PresentationQualityScore, type PresentationResult, type PresentationType, QAEngine, QAFailureError, type QAIssue, type QAResults, QuickChartProvider, RevealJsGenerator, type SCQAStructure, ScoreCalculator, type ScoringWeights, type SevenDimensionQAResult, type SignalNoiseResult, type Slide, type SlideContentScore, type SlideData, SlideFactory, SlideGenerator, type SlideTemplate, type SlideType, type SlideValidationResult, type SlideVisualScore, type SparklineStructure, type StoryStructure, TemplateEngine, TemplateNotFoundError, type ThemeName, type TypographyRules, UnsplashImageProvider, VERSION, ValidationError, type ValidationRules, type VisualQAResults, VisualQualityEvaluator, createDefaultChartProvider, createDefaultImageProvider, createSlideFactory, _default as default, evaluatePresentation, generate, getKnowledgeGateway, initSlideGenerator, validate };
2205
+ export { type AccessibilityResults, type ChartData, type ChartDataset, ChartJsProvider, type ChartProvider, type ChartRequest, type ChartResult, type ChartType, type ColorPalette, CompositeChartProvider, CompositeImageProvider, type ContentAnalysis$1 as ContentAnalysis, ContentAnalyzer, type ContentPattern, ContentPatternClassifier, type ContentQAResults, type ContentSection$1 as ContentSection, type ContrastIssue, type ExpertQAResults, type ExpertValidation, type FontSizeIssue, type GlanceTestResult, type ImageData, type ImageProvider, type ImageRequest, type ImageResult, KnowledgeBaseError, KnowledgeGateway, type LegacySlide, LocalImageProvider, MermaidProvider, type MetricData, type OneIdeaResult, type OutputFormat, PlaceholderImageProvider, PowerPointGenerator, type PresentationConfig, PresentationEngine, type PresentationMetadata, type PresentationMode$1 as PresentationMode, type PresentationQualityScore, type PresentationResult, type PresentationType, QAEngine, QAFailureError, type QAIssue, type QAResults, QuickChartProvider, RevealJsGenerator, type SCQAStructure, ScoreCalculator, type ScoringWeights, type SevenDimensionQAResult, type SignalNoiseResult, type Slide, type SlideContentScore, type SlideData, SlideFactory, SlideGenerator, type SlideScore, type SlideTemplate, type SlideType, type SlideValidationResult, type SlideVisualScore, type SparklineStructure, type StoryStructure, TemplateEngine, TemplateNotFoundError, type ThemeName, type TypographyRules, UnsplashImageProvider, VERSION, ValidationError, type ValidationRules, type VisualQAResults, VisualQualityEvaluator, createDefaultChartProvider, createDefaultImageProvider, createSlideFactory, _default as default, evaluatePresentation, generate, getKnowledgeGateway, initSlideGenerator, validate };