{"_id":"presenton","_rev":"7-7352b3807a7a13f889322d2e13603605","name":"presenton","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"presenton","version":"0.1.0","author":"","license":"ISC","_id":"presenton@0.1.0","maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"}],"dist":{"shasum":"f1cccdb5e2eb52fc7cd34c4901a50c7d597947d0","tarball":"https://registry.npmjs.org/presenton/-/presenton-0.1.0.tgz","fileCount":2,"integrity":"sha512-mCZN/oJbvqRrbPj5QXnYUrfRJbcw02KwT2UNFmgRRz/U5y95GLTbw7R8Dsvnz46L4NX9H9mhlh3aluFttn7vbA==","signatures":[{"sig":"MEQCIE3VNpgc8NwLFCYpehi+QTpeqzXG6s8uPr1L4Uh5N/ULAiBg/cyRydwmmtRAm8XsIKuwpzfCZlndMIWt6shNuj7cmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233},"main":"index.js","gitHead":"76c0399eb3950750b01fb2876d4b41318b6d78ff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"presenton.ai","email":"saurav@presenton.ai"},"_npmVersion":"10.9.3","description":"Coming soon...","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/presenton_0.1.0_1765791513411_0.635505397623124","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"presenton","version":"0.1.1","keywords":["presenton","presentation","powerpoint","open source","open source ai presentation generator","pptx","pdf","slides","ai presentation generation","ai-presentation","presentation-generator","sdk","typescript","node"],"author":{"name":"Presenton"},"license":"ISC","_id":"presenton@0.1.1","maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"},{"name":"shivarajbadu","email":"shiva@presenton.ai"},{"name":"surajbeston","email":"suraj@presenton.ai"}],"homepage":"https://docs.presenton.ai","bugs":{"url":"https://github.com/presenton/presenton-sdk/issues"},"dist":{"shasum":"c32167af98392c3d2182f60fb433023a8f9dcf93","tarball":"https://registry.npmjs.org/presenton/-/presenton-0.1.1.tgz","fileCount":17,"integrity":"sha512-XbxsXfHNtnLZIPsNlkGLqDWGyfEfeQZKGVCOFM6GROHwiFjB/o2Hd8I/k93XrCjPpvhqiHwQxutMyoHl3tOvdg==","signatures":[{"sig":"MEUCIQCC82y9SSRoLjahxqZK/ZQcHv6r7/pK4SmTSxhvcxPdPgIgMyUKd1TA/Y5eI3D/MGc+YoRd8lyyZB7LzNuuqnEdE3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89308},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"shivarajbadu","email":"shiva@presenton.ai"},"repository":{"url":"git+https://github.com/presenton/presenton-sdk.git","type":"git"},"_npmVersion":"11.6.3","description":"Official Node.js/TypeScript SDK for the Presenton AI presentation generation API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/presenton_0.1.1_1768045239766_0.8501164575312912","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"presenton","version":"0.1.2","keywords":["presenton","presentation","powerpoint","open source","open source ai presentation generator","pptx","pdf","slides","ai presentation generation","ai-presentation","presentation-generator","sdk","typescript","node"],"author":{"name":"Presenton"},"license":"ISC","_id":"presenton@0.1.2","maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"},{"name":"shivarajbadu","email":"shiva@presenton.ai"},{"name":"surajbeston","email":"suraj@presenton.ai"}],"homepage":"https://docs.presenton.ai","bugs":{"url":"https://github.com/presenton/presenton/issues"},"dist":{"shasum":"c1c90deb72bf548e23fc1abdb88c7beb546cec9a","tarball":"https://registry.npmjs.org/presenton/-/presenton-0.1.2.tgz","fileCount":17,"integrity":"sha512-kyjuryvXcDGxHmtJcHUAtUGOqZcLMpLpXMGHKAb7cbYZRxr/jnAqcIyJar+vLnm3AANqWIsblgU4URvkawWMZw==","signatures":[{"sig":"MEYCIQDY0dDX1Q5Z+ae2G4JlM829cIV7p2Jctz07E1dQg1yRwAIhAM05s+T2ogqVEcNpGLLwwYxhM00/9k4k9AGWrdjb4+gK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"shivarajbadu","email":"shiva@presenton.ai"},"repository":{"url":"git+https://github.com/presenton/presenton.git","type":"git"},"_npmVersion":"11.6.3","description":"Official Node.js/TypeScript SDK for the Presenton AI presentation generation API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/presenton_0.1.2_1768045464705_0.7781842130285204","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"presenton","version":"0.1.3","keywords":["presenton","presentation","powerpoint","open source","open source ai presentation generator","pptx","pdf","slides","ai presentation generation","ai-presentation","presentation-generator","sdk","typescript","node"],"author":{"name":"Presenton"},"license":"MIT","_id":"presenton@0.1.3","maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"},{"name":"shivarajbadu","email":"shiva@presenton.ai"},{"name":"surajbeston","email":"suraj@presenton.ai"}],"homepage":"https://docs.presenton.ai","bugs":{"url":"https://github.com/presenton/presenton/issues"},"dist":{"shasum":"13e97756b4524f34afcb416714427217c7d029cc","tarball":"https://registry.npmjs.org/presenton/-/presenton-0.1.3.tgz","fileCount":17,"integrity":"sha512-1P1MaXGT4Ek7MmvBLv0tBWyC2x+KuHWACPdM4v+x2sf0MCQ8EC+t9aKr5X3sC4m8fYLkKa6/ssWflilV/GYivg==","signatures":[{"sig":"MEYCIQCe8ZeZbY25ab3OoZ3WpF1h5dIUFj43MX9UkOf5f74i/QIhAM9qulkLPuJWjlcNyUTUFRClPU8PC9SjDHaNhBkmb4Y0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87848},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f30591a5cb15aba7ec1cef9df19b2f423b83cfd1","scripts":{"build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"shivarajbadu","email":"shiva@presenton.ai"},"repository":{"url":"git+https://github.com/presenton/presenton.git","type":"git"},"_npmVersion":"11.6.3","description":"Official Node.js/TypeScript SDK for the Presenton AI presentation generation API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/presenton_0.1.3_1768238342821_0.4425334184989336","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"presenton","version":"0.1.4","publishConfig":{"access":"public"},"description":"Official Node.js/TypeScript SDK for the Presenton AI presentation generation API","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","prepublishOnly":"npm run build","typecheck":"tsc --noEmit"},"keywords":["presenton","presentation","powerpoint","open source","open source ai presentation generator","pptx","pdf","slides","ai presentation generation","ai-presentation","presentation-generator","sdk","typescript","node"],"author":{"name":"Presenton"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/presenton/presenton.git"},"homepage":"https://docs.presenton.ai","bugs":{"url":"https://github.com/presenton/presenton/issues"},"engines":{"node":">=18"},"devDependencies":{"@types/node":"^20.10.0","tsx":"^4.7.0","typescript":"^5.3.3"},"gitHead":"664c4cf134ae2d1e258a8914a1faddeed8382bdc","_id":"presenton@0.1.4","_nodeVersion":"22.17.0","_npmVersion":"11.6.3","dist":{"integrity":"sha512-DSN5sZ7mPq9a7LI+/UcMzkshVzjV1azis7KF9BfN/f7uT4b/BEN/Ak9bb1LHZSJ2plt2dt/EcSoifQ7yRvI11w==","shasum":"0fa8c2261792431d881ed45a507f4ea74ef11072","tarball":"https://registry.npmjs.org/presenton/-/presenton-0.1.4.tgz","fileCount":17,"unpackedSize":87848,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCXMk+s3kL3ydoB4A6uQbEL65TKhHIk/o9vuKbSTaXBQAIhAP4lD/WMbW0kEB+1cn1Q+VFJJzRizFl6kmte+BBUIZsR"}]},"_npmUser":{"name":"presenton.ai","email":"saurav@presenton.ai"},"directories":{},"maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"},{"name":"shivarajbadu","email":"shiva@presenton.ai"},{"name":"surajbeston","email":"suraj@presenton.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/presenton_0.1.4_1769009473103_0.7556309221210944"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-15T09:38:33.410Z","modified":"2026-01-21T15:31:13.407Z","0.1.0":"2025-12-15T09:38:33.555Z","0.1.1":"2026-01-10T11:40:39.910Z","0.1.2":"2026-01-10T11:44:24.843Z","0.1.3":"2026-01-12T17:19:03.014Z","0.1.4":"2026-01-21T15:31:13.256Z"},"bugs":{"url":"https://github.com/presenton/presenton/issues"},"author":{"name":"Presenton"},"license":"MIT","homepage":"https://docs.presenton.ai","keywords":["presenton","presentation","powerpoint","open source","open source ai presentation generator","pptx","pdf","slides","ai presentation generation","ai-presentation","presentation-generator","sdk","typescript","node"],"repository":{"type":"git","url":"git+https://github.com/presenton/presenton.git"},"description":"Official Node.js/TypeScript SDK for the Presenton AI presentation generation API","maintainers":[{"name":"presenton.ai","email":"saurav@presenton.ai"},{"name":"shivarajbadu","email":"shiva@presenton.ai"},{"name":"surajbeston","email":"suraj@presenton.ai"}],"readme":"# Presenton SDK for Node.js\n\nThe official JavaScript/TypeScript SDK for the [Presenton](https://presenton.ai) AI presentation generation API.\n\n[![npm version](https://badge.fury.io/js/presenton.svg)](https://www.npmjs.com/package/presenton)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Installation\n\n```bash\nnpm install presenton\n```\n\n## Quick Start\n\n```typescript\nimport { Presenton, Tone, Theme } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: \"sk-presenton-xxxxxxxx\",\n  baseUrl: \"https://api.presenton.ai\",\n});\n\nconst result = await client.presentations.generate({\n  content: \"Introduction to Machine Learning\",\n  numSlides: 10,\n  tone: Tone.Professional,\n  theme: Theme.ProfessionalBlue,\n});\n\nconsole.log(result.path); // https://presenton.ai/view/...\n```\n\n---\n\n## Examples\n\n### 1. Synchronous Generation\n\nGenerate a presentation and wait for the result. Best for quick presentations (< 15 slides).\n\n```typescript\nimport { Presenton, Tone, Verbosity, Theme, ExportFormat } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function generatePresentation() {\n  const result = await client.presentations.generate({\n    // Required: Your topic or content\n    content: \"Quarterly Sales Report Q4 2024\",\n\n    // Optional: Number of slides (1-50)\n    numSlides: 12,\n\n    // Optional: Tone of the presentation\n    tone: Tone.Professional,\n\n    // Optional: How much text per slide\n    verbosity: Verbosity.Standard,\n\n    // Optional: Visual theme\n    theme: Theme.ProfessionalBlue,\n\n    // Optional: Output format\n    exportAs: ExportFormat.PPTX,\n\n    // Optional: Additional instructions for AI\n    instructions: \"Focus on revenue growth and include charts\",\n\n    // Optional: Include table of contents\n    includeTableOfContents: true,\n  });\n\n  console.log(\"Presentation generated!\");\n  console.log(\"ID:\", result.presentationId);\n  console.log(\"View:\", result.path);\n  console.log(\"Edit:\", result.editPath);\n  console.log(\"Credits used:\", result.creditsConsumed);\n}\n\ngeneratePresentation();\n```\n\n---\n\n### 2. Asynchronous Generation with Status Polling\n\nFor longer presentations, use async generation to avoid long waits. The SDK polls automatically.\n\n```typescript\nimport { Presenton, Tone, TaskStatus } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function generateLargePresentation() {\n  // Step 1: Start async generation\n  const task = await client.presentations.generateAsync({\n    content: \"Complete Guide to Cloud Computing\",\n    numSlides: 30,\n    tone: Tone.Educational,\n  });\n\n  console.log(\"Task started!\");\n  console.log(\"Task ID:\", task.taskId);\n  console.log(\"Status:\", task.status);\n\n  // Step 2: Wait for completion with progress updates\n  const result = await client.presentations.waitForCompletion(task.taskId, {\n    // Check status every 3 seconds\n    interval: 3000,\n\n    // Callback on each status check\n    onStatusChange: (status) => {\n      console.log(`Status: ${status.status}`);\n\n      if (status.status === TaskStatus.Completed) {\n        console.log(\"Generation complete!\");\n      }\n    },\n  });\n\n  console.log(\"Presentation ready!\");\n  console.log(\"View:\", result.path);\n}\n\ngenerateLargePresentation();\n```\n\n---\n\n### 3. Manual Status Checking\n\nIf you prefer to check status manually instead of using `waitForCompletion`:\n\n```typescript\nimport { Presenton, TaskStatus } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function manualStatusCheck() {\n  // Start async generation\n  const task = await client.presentations.generateAsync({\n    content: \"AI in Healthcare\",\n    numSlides: 20,\n  });\n\n  console.log(\"Task ID:\", task.taskId);\n\n  // Poll manually\n  let completed = false;\n\n  while (!completed) {\n    // Wait 2 seconds between checks\n    await new Promise((resolve) => setTimeout(resolve, 2000));\n\n    // Check status\n    const status = await client.presentations.getStatus(task.taskId);\n    console.log(\"Current status:\", status.status);\n\n    if (status.status === TaskStatus.Completed) {\n      completed = true;\n      console.log(\"Done! View at:\", status.data?.path);\n    }\n\n    if (status.status === TaskStatus.Error) {\n      console.error(\"Generation failed:\", status.error);\n      break;\n    }\n  }\n}\n\nmanualStatusCheck();\n```\n\n---\n\n### 4. Upload Files\n\nUpload PDF, DOCX, XLSX, or other files to use as source material.\n\n```typescript\nimport { Presenton } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function uploadFiles() {\n  // Upload files by path (Node.js)\n  const { fileIds } = await client.files.upload([\n    \"./documents/report.pdf\",\n    \"./documents/data.xlsx\",\n    \"./documents/notes.docx\",\n  ]);\n\n  console.log(\"Files uploaded!\");\n  console.log(\"File IDs:\", fileIds);\n  // ['file-abc123', 'file-def456', 'file-ghi789']\n}\n\nuploadFiles();\n```\n\n**Browser upload example:**\n\n```typescript\n// Get files from input element\nconst fileInput = document.querySelector(\n  'input[type=\"file\"]'\n) as HTMLInputElement;\nconst files = Array.from(fileInput.files || []);\n\nconst { fileIds } = await client.files.upload(files);\nconsole.log(\"Uploaded:\", fileIds);\n```\n\n---\n\n### 5. Upload Files Then Generate Presentation\n\nThe complete workflow: upload source files, then generate a presentation from them.\n\n```typescript\nimport { Presenton, Tone, Theme, ExportFormat } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function createPresentationFromFiles() {\n  // Step 1: Upload source files\n  console.log(\"Uploading files...\");\n\n  const { fileIds } = await client.files.upload([\n    \"./quarterly-report.pdf\",\n    \"./sales-data.xlsx\",\n  ]);\n\n  console.log(\"Files uploaded:\", fileIds);\n\n  // Step 2: Generate presentation using uploaded files\n  console.log(\"Generating presentation...\");\n\n  const result = await client.presentations.generate({\n    // Describe what you want\n    content: \"Create a quarterly business review presentation\",\n\n    // Reference the uploaded files\n    files: fileIds,\n\n    // Customize the output\n    numSlides: 15,\n    tone: Tone.Professional,\n    theme: Theme.ProfessionalDark,\n    exportAs: ExportFormat.PPTX,\n\n    // Additional instructions\n    instructions: \"Extract key metrics and create visualizations from the data\",\n\n    // Add table of contents\n    includeTableOfContents: true,\n  });\n\n  console.log(\"Presentation created!\");\n  console.log(\"View:\", result.path);\n  console.log(\"Edit:\", result.editPath);\n}\n\ncreatePresentationFromFiles();\n```\n\n---\n\n### 6. Generate with Pre-defined Slide Content\n\nUse `slidesMarkdown` to specify exact content for each slide:\n\n```typescript\nimport { Presenton, Theme } from \"presenton\";\n\nconst client = new Presenton({\n  apiKey: process.env.PRESENTON_API_KEY!,\n});\n\nasync function generateWithMarkdown() {\n  const result = await client.presentations.generate({\n    // Define content for each slide in markdown\n    slidesMarkdown: [\n      \"# Welcome\\n\\nIntroduction to our company\",\n      \"# Our Mission\\n\\n- Innovation first\\n- Customer focused\\n- Quality driven\",\n      \"# Products\\n\\n- Product A: Enterprise solution\\n- Product B: SMB solution\",\n      \"# Contact\\n\\n**Email:** hello@company.com\\n**Phone:** 555-1234\",\n    ],\n\n    theme: Theme.MintBlue,\n  });\n\n  console.log(\"Presentation:\", result.path);\n}\n\ngenerateWithMarkdown();\n```\n\n---\n\n## Configuration Options\n\n### Client Options\n\n```typescript\nconst client = new Presenton({\n  // Required: Your API key\n  apiKey: \"sk-presenton-xxxxxxxx\",\n\n  // Optional: Custom API URL (for self-hosted)\n  baseUrl: \"https://api.presenton.ai\",\n\n  // Optional: Max retry attempts (default: 3)\n  maxRetries: 3,\n\n  // Optional: Base delay between retries in ms (default: 1000)\n  retryDelay: 1000,\n});\n```\n\n### Generation Options\n\n#### ⚠️ Required: Choose ONE Content Source\n\nYou must provide **at least one** of these three options:\n\n| Option           | When to Use                                        |\n| ---------------- | -------------------------------------------------- |\n| `content`        | Let AI generate slides from your topic/description |\n| `slidesMarkdown` | Define exact content for each slide yourself       |\n| `files`          | Generate presentation from uploaded documents      |\n\nYou can also combine `files` with either `content` or `slidesMarkdown` to use uploaded documents as reference material.\n\n#### All Options\n\n| Option                   | Type                 | Required | Default    | Description                                       |\n| ------------------------ | -------------------- | -------- | ---------- | ------------------------------------------------- |\n| `content`                | `string`             | \\*       | -          | Main topic or content for the presentation        |\n| `slidesMarkdown`         | `string[]`           | \\*       | -          | Pre-defined markdown content for each slide       |\n| `files`                  | `string[]`           | \\*       | -          | File IDs from upload to use as source material    |\n| `numSlides`              | `number`             | No       | auto       | Number of slides to generate (1-50)               |\n| `slidesLayout`           | `(string\\|null)[]`   | No       | -          | Layout specification for each slide               |\n| `instructions`           | `string`             | No       | -          | Additional instructions for AI                    |\n| `tone`                   | `Tone`               | No       | `Default`  | Voice tone for the text                           |\n| `verbosity`              | `Verbosity`          | No       | `Standard` | Amount of text per slide                          |\n| `contentGeneration`      | `ContentGeneration`  | No       | -          | How to handle content (preserve/enhance/condense) |\n| `markdownEmphasis`       | `boolean`            | No       | `true`     | Apply bold/italic formatting                      |\n| `webSearch`              | `boolean`            | No       | `false`    | Enable web search for additional content          |\n| `imageType`              | `ImageType`          | No       | `Stock`    | Image source (stock or AI-generated)              |\n| `theme`                  | `Theme \\| string`    | No       | -          | Use `Theme` enum or custom theme ID               |\n| `language`               | `Language \\| string` | No       | `English`  | Presentation language                             |\n| `template`               | `Template \\| string` | No       | `General`  | Use `Template` enum or custom template ID         |\n| `includeTableOfContents` | `boolean`            | No       | `false`    | Add table of contents slide                       |\n| `includeTitleSlide`      | `boolean`            | No       | `true`     | Add title slide                                   |\n| `exportAs`               | `ExportFormat`       | No       | `PPTX`     | Output format (PPTX or PDF)                       |\n| `triggerWebhook`         | `boolean`            | No       | `false`    | Trigger configured webhooks on completion         |\n\n> **\\*** At least one of `content`, `slidesMarkdown`, or `files` is required.\n\n### Using Custom Theme or Template\n\nYou can use built-in enums or your own custom theme/template IDs:\n\n```typescript\nimport { Presenton, Theme, Template } from \"presenton\";\n\n// Using built-in enum\nconst result1 = await client.presentations.generate({\n  content: \"My presentation\",\n  theme: Theme.ProfessionalBlue,\n  template: Template.Modern,\n});\n\n// Using custom theme/template ID (from your Presenton dashboard)\nconst result2 = await client.presentations.generate({\n  content: \"My presentation\",\n  theme: \"my-custom-theme-id\",\n  template: \"my-custom-template-id\",\n});\n```\n\n---\n\n## Available Enums\n\n### Tone\n\n```typescript\nimport { Tone } from \"presenton\";\n\nTone.Default; // Balanced, neutral\nTone.Casual; // Conversational\nTone.Professional; // Formal business\nTone.Funny; // Light-hearted\nTone.Educational; // Instructional\nTone.SalesPitch; // Persuasive\n```\n\n### Verbosity\n\n```typescript\nimport { Verbosity } from \"presenton\";\n\nVerbosity.Concise; // Minimal text\nVerbosity.Standard; // Balanced\nVerbosity.TextHeavy; // Detailed\n```\n\n### Theme\n\n```typescript\nimport { Theme } from \"presenton\";\n\nTheme.EdgeYellow;\nTheme.LightRose;\nTheme.MintBlue;\nTheme.ProfessionalBlue;\nTheme.ProfessionalDark;\n```\n\n### Template\n\n```typescript\nimport { Template } from \"presenton\";\n\nTemplate.General;\nTemplate.Modern;\nTemplate.Standard;\nTemplate.Swift;\n```\n\n### ExportFormat\n\n```typescript\nimport { ExportFormat } from \"presenton\";\n\nExportFormat.PPTX; // PowerPoint\nExportFormat.PDF; // PDF\n```\n\n---\n\n## Error Handling\n\n```typescript\nimport {\n  Presenton,\n  ValidationError,\n  AuthenticationError,\n  APIError,\n  RateLimitError,\n  NetworkError,\n  GenerationError,\n  UploadError,\n} from \"presenton\";\n\nconst client = new Presenton({ apiKey: \"sk-presenton-xxx\" });\n\ntry {\n  const result = await client.presentations.generate({\n    content: \"My presentation\",\n    numSlides: 10,\n  });\n} catch (error) {\n  if (error instanceof ValidationError) {\n    // Input validation failed\n    console.error(\"Invalid input:\");\n    error.details.forEach((d) => {\n      console.error(`  ${d.field}: ${d.message}`);\n    });\n  } else if (error instanceof AuthenticationError) {\n    // Invalid API key\n    console.error(\"Check your API key\");\n  } else if (error instanceof RateLimitError) {\n    // Too many requests\n    console.error(`Rate limited. Retry after ${error.retryAfter} seconds`);\n  } else if (error instanceof NetworkError) {\n    // Network issue\n    console.error(\"Network error:\", error.message);\n  } else if (error instanceof APIError) {\n    // API error\n    console.error(`API error (${error.statusCode}): ${error.message}`);\n  } else if (error instanceof GenerationError) {\n    // Generation failed\n    console.error(\"Generation failed:\", error.message);\n  } else if (error instanceof UploadError) {\n    // File upload failed\n    console.error(\"Upload failed:\", error.fileName);\n  }\n}\n```\n\n---\n\n## Links\n\n- [Presenton Website](https://presenton.ai)\n- [API Documentation](https://docs.presenton.ai)\n- [Get API Key](https://presenton.ai/api-key)\n- [GitHub](https://github.com/presenton/presenton)\n\n## License\n\nMIT License\n","readmeFilename":"README.md"}