@thanh01.pmt/presentation-kit 0.2.8 → 0.2.10
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/dist/ai/index.cjs +7 -7
- package/dist/ai/index.js +1 -1
- package/dist/{chunk-IGCFC6GI.cjs → chunk-3Q4RMZVQ.cjs} +58 -13
- package/dist/chunk-3Q4RMZVQ.cjs.map +1 -0
- package/dist/{chunk-JOW4QWKF.js → chunk-NYLDRVHZ.js} +16 -6
- package/dist/chunk-NYLDRVHZ.js.map +1 -0
- package/dist/{chunk-VLAPHJOC.cjs → chunk-TGI6YSZP.cjs} +16 -6
- package/dist/chunk-TGI6YSZP.cjs.map +1 -0
- package/dist/{chunk-26ZVUVXF.js → chunk-V6X7D44H.js} +58 -14
- package/dist/chunk-V6X7D44H.js.map +1 -0
- package/dist/index.cjs +47 -43
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +4 -4
- package/dist/react/index.cjs +113 -65
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +11 -3
- package/dist/react/index.d.ts +11 -3
- package/dist/react/index.js +101 -53
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-26ZVUVXF.js.map +0 -1
- package/dist/chunk-IGCFC6GI.cjs.map +0 -1
- package/dist/chunk-JOW4QWKF.js.map +0 -1
- package/dist/chunk-VLAPHJOC.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/layout/serializer.ts","../src/core/layout/presets.ts"],"names":[],"mappings":"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","file":"chunk-26ZVUVXF.js","sourcesContent":["import yaml from 'js-yaml';\nimport type { SlideLayoutData } from '../../types.js';\n\n/**\n * Serialize a SlideLayoutData object into a Markdown HTML comment\n */\nexport function serializeLayoutToComment(layout: SlideLayoutData): string {\n if (!layout.boxes || layout.boxes.length === 0) return '';\n\n const cleanData = {\n boxes: layout.boxes.map(box => {\n const b: Record<string, unknown> = {\n id: box.id,\n target: box.target || `h1`,\n pos: [\n Math.round(box.pos[0]),\n Math.round(box.pos[1]),\n Math.round(box.pos[2]),\n Math.round(box.pos[3]),\n ],\n };\n if (box.fontSize) b.fontSize = box.fontSize;\n if (box.color) b.color = box.color;\n if (box.textAlign) b.textAlign = box.textAlign;\n if (box.style) b.style = box.style;\n return b;\n }),\n };\n\n const yamlStr = yaml.dump(cleanData, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n }).trim();\n\n return `<!-- layout:\\n ${yamlStr.split('\\n').join('\\n ')}\\n-->`;\n}\n\n/**\n * Split a Markdown presentation into individual slide strings,\n * properly handling frontmatter and code blocks.\n */\nexport function splitMarkdownSlides(markdown: string): {\n frontmatter: string | null;\n slides: string[];\n} {\n const lines = markdown.split('\\n');\n let frontmatter: string | null = null;\n const slideBuffers: string[][] = [];\n let currentBuffer: string[] = [];\n\n let inCodeFence = false;\n let inFrontmatter = false;\n let lineIdx = 0;\n\n // Check for leading frontmatter\n if (lines.length > 0 && lines[0].trim() === '---') {\n inFrontmatter = true;\n const fmBuffer: string[] = [lines[0]];\n lineIdx = 1;\n\n while (lineIdx < lines.length) {\n const line = lines[lineIdx];\n fmBuffer.push(line);\n if (line.trim() === '---') {\n frontmatter = fmBuffer.join('\\n');\n lineIdx++;\n break;\n }\n lineIdx++;\n }\n }\n\n // Iterate remaining lines to collect slides\n for (let i = lineIdx; i < lines.length; i++) {\n const line = lines[i];\n\n if (/^```/.test(line.trim())) {\n inCodeFence = !inCodeFence;\n currentBuffer.push(line);\n continue;\n }\n\n if (!inCodeFence && line.trim() === '---') {\n slideBuffers.push(currentBuffer);\n currentBuffer = [];\n continue;\n }\n\n currentBuffer.push(line);\n }\n\n slideBuffers.push(currentBuffer);\n\n const slides = slideBuffers.map(b => b.join('\\n'));\n return { frontmatter, slides };\n}\n\n/**\n * Update or insert a layout comment inside a specific slide's markdown\n */\nexport function updateSlideLayoutInMarkdown(\n markdown: string,\n slideIndex: number,\n layout: SlideLayoutData | null\n): string {\n const { frontmatter, slides } = splitMarkdownSlides(markdown);\n\n if (slideIndex < 0 || slideIndex >= slides.length) {\n return markdown;\n }\n\n let slideContent = slides[slideIndex];\n\n // Regex to detect existing layout comment\n const layoutCommentRegex = /<!--\\s*layout:\\s*[\\s\\S]*?-->/i;\n\n const newComment = layout && layout.boxes && layout.boxes.length > 0\n ? serializeLayoutToComment(layout)\n : '';\n\n if (layoutCommentRegex.test(slideContent)) {\n if (newComment) {\n slideContent = slideContent.replace(layoutCommentRegex, newComment);\n } else {\n slideContent = slideContent.replace(layoutCommentRegex, '').trim();\n }\n } else if (newComment) {\n // Prepend layout comment to the slide\n const trimmed = slideContent.trimStart();\n slideContent = `${newComment}\\n\\n${trimmed}`;\n }\n\n // If any boxes have text content that does not yet exist in the slide, append it\n if (layout && layout.boxes) {\n for (const box of layout.boxes) {\n if (box.content && box.content.trim() && !slideContent.includes(box.content.trim())) {\n const prefix = box.target === 'h1' ? '# ' : box.target === 'h2' ? '## ' : box.target === 'h3' ? '### ' : '';\n slideContent = `${slideContent.trimEnd()}\\n\\n${prefix}${box.content.trim()}\\n`;\n }\n }\n }\n\n slides[slideIndex] = slideContent;\n\n // Reassemble deck\n const joinedSlides = slides.join('\\n---\\n');\n if (frontmatter) {\n return `${frontmatter}\\n\\n${joinedSlides}`;\n }\n return joinedSlides;\n}\n\n/**\n * Update text content inside a specific slide's markdown.\n * Replaces oldText with newText within the given slideIndex.\n */\nexport function updateSlideTextInMarkdown(\n markdown: string,\n slideIndex: number,\n oldText: string,\n newText: string\n): string {\n const { frontmatter, slides } = splitMarkdownSlides(markdown);\n\n if (slideIndex < 0 || slideIndex >= slides.length) {\n return markdown;\n }\n\n const cleanOld = oldText.trim();\n const cleanNew = newText.trim();\n if (!cleanOld || cleanOld === cleanNew) return markdown;\n\n let slideContent = slides[slideIndex];\n\n // Try exact match first\n if (slideContent.includes(cleanOld)) {\n slideContent = slideContent.replace(cleanOld, cleanNew);\n } else {\n // Check line-by-line stripping markdown decorators (#, -, *, >, `)\n const lines = slideContent.split('\\n');\n let replaced = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const stripped = line.replace(/^[#\\s\\-\\*\\>]+/, '').replace(/[*_`]/g, '').trim();\n if (stripped === cleanOld) {\n const prefixMatch = line.match(/^([#\\s\\-\\*\\>]+)/);\n const prefix = prefixMatch ? prefixMatch[1] : '';\n lines[i] = `${prefix}${cleanNew}`;\n replaced = true;\n break;\n }\n }\n\n if (replaced) {\n slideContent = lines.join('\\n');\n } else {\n // Escape regex characters and try matching regex\n const escaped = cleanOld.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escaped, 'i');\n if (regex.test(slideContent)) {\n slideContent = slideContent.replace(regex, cleanNew);\n } else {\n // Fuzzy word match\n const words = cleanOld.split(/\\s+/).filter(w => w.length > 2);\n if (words.length > 0) {\n const pattern = words.map(w => w.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('[\\\\s\\\\S]*?');\n const fuzzyRegex = new RegExp(pattern, 'i');\n if (fuzzyRegex.test(slideContent)) {\n slideContent = slideContent.replace(fuzzyRegex, cleanNew);\n }\n }\n }\n }\n }\n\n slides[slideIndex] = slideContent;\n\n const joinedSlides = slides.join('\\n---\\n');\n if (frontmatter) {\n return `${frontmatter}\\n\\n${joinedSlides}`;\n }\n return joinedSlides;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit — Slide Layout Presets\n// Catalog of battle-tested single-slide layout templates with 1280x720 canvas coordinates\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { SlideLayoutData } from '../../types.js';\n\nexport type SlideLayoutCategory =\n | 'cover'\n | 'content'\n | 'split'\n | 'code'\n | 'metrics'\n | 'diagram'\n | 'quote'\n | 'assessment';\n\nexport interface SlideLayoutPreset {\n id: string;\n name: string;\n category: SlideLayoutCategory;\n description: string;\n layout: SlideLayoutData;\n markdownSnippet: string;\n}\n\nexport const SLIDE_LAYOUT_PRESETS: SlideLayoutPreset[] = [\n {\n id: 'title-hero',\n name: 'Title & Speaker Cover',\n category: 'cover',\n description: 'High-impact opening slide with large title, subtitle, and speaker credentials.',\n layout: {\n boxes: [\n {\n id: 'title',\n target: 'h1',\n pos: [100, 180, 1080, 140],\n fontSize: '3rem',\n textAlign: 'center',\n },\n {\n id: 'subtitle',\n target: 'h3',\n pos: [100, 350, 1080, 70],\n fontSize: '1.5rem',\n textAlign: 'center',\n },\n {\n id: 'speaker-meta',\n target: 'p',\n pos: [100, 460, 1080, 80],\n fontSize: '1.1rem',\n textAlign: 'center',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: title\n target: h1\n pos: [100, 180, 1080, 140]\n fontSize: 3rem\n textAlign: center\n - id: subtitle\n target: h3\n pos: [100, 350, 1080, 70]\n fontSize: 1.5rem\n textAlign: center\n - id: speaker-meta\n target: p\n pos: [100, 460, 1080, 80]\n fontSize: 1.1rem\n textAlign: center\n-->\n\n# 🚀 Engineering Scalable Cloud Systems\n### Principles, Bottlenecks, and Real-World Architecture Patterns\n\n**Presenter:** Senior Systems Architect | **Duration:** 45 mins | **Level:** Intermediate\n\n<!--\nPresenter Notes:\n- Welcome the audience and outline today's primary engineering goals.\n- Spark curiosity with an opening hook about scaling under high concurrency.\n-->`,\n },\n\n {\n id: 'two-column-split',\n name: 'Two-Column Comparison',\n category: 'split',\n description: 'Balanced side-by-side comparison for legacy vs modern patterns or pros vs cons.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'col-left',\n target: '.columns-2 > div:first-child',\n pos: [80, 150, 530, 510],\n },\n {\n id: 'col-right',\n target: '.columns-2 > div:last-child',\n pos: [670, 150, 530, 510],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: col-left\n target: '.columns-2 > div:first-child'\n pos: [80, 150, 530, 510]\n - id: col-right\n target: '.columns-2 > div:last-child'\n pos: [670, 150, 530, 510]\n-->\n\n## ⚖️ Monolithic Polling vs Event-Driven Architecture\n\n<div class=\"columns-2\">\n<div>\n\n### 🔴 Legacy Polling\n- Heavy database CPU overhead on idle cycles\n- High network latency between updates\n- Prone to cascading timeouts during spikes\n\n</div>\n<div>\n\n### 🟢 Event-Driven Streams\n- Real-time event propagation via webhooks\n- Zero idle compute waste with serverless consumers\n- Automatic backpressure and queue isolation\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Emphasize the core failure mode of periodic polling under sudden load spikes.\n- Ask the room if anyone has experienced database lockups caused by polling loops.\n-->`,\n },\n\n {\n id: 'code-explainer',\n name: 'Code Walkthrough & Analysis',\n category: 'code',\n description: 'Syntax-highlighted code block on the left with step-by-step key annotations on the right.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'code-box',\n target: '.columns-2 > div:first-child',\n pos: [80, 135, 630, 535],\n },\n {\n id: 'notes-box',\n target: '.columns-2 > div:last-child',\n pos: [740, 135, 460, 535],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: code-box\n target: '.columns-2 > div:first-child'\n pos: [80, 135, 630, 535]\n - id: notes-box\n target: '.columns-2 > div:last-child'\n pos: [740, 135, 460, 535]\n-->\n\n## 💻 Robust Async Transaction Pipeline\n\n<div class=\"columns-2\">\n<div>\n\n\\`\\`\\`ts\n// Process payment with idempotency guarantee\nexport async function processPayment(order: Order) {\n const isValid = await validateOrder(order);\n if (!isValid) throw new Error(\"ValidationFailed\");\n\n const receipt = await chargeCard(order);\n return sendConfirmation(receipt);\n}\n\\`\\`\\`\n\n</div>\n<div>\n\n### 🔍 Key Engineering Invariants:\n1. **Early Guard Clause:** Validates payload immediately at line 3 before triggering external calls.\n2. **Deterministic Sequence:** Enforces strict order of operations using native \\`await\\`.\n3. **Audit Trail:** Returns immutable payment receipt upon successful execution.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Walk through lines 1 to 7 sequentially.\n- Cold-call check: \"What happens if line 6 throws a network timeout?\"\n- Cognitive scaffolding: Highlight the importance of idempotency keys in payment APIs.\n-->`,\n },\n\n {\n id: 'metrics-3-card',\n name: '3-Metric Key Results Grid',\n category: 'metrics',\n description: 'Three high-visibility KPI stat cards for benchmarks, impact, and success criteria.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n textAlign: 'center',\n },\n {\n id: 'metric-1',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 165, 340, 485],\n },\n {\n id: 'metric-2',\n target: '.columns-3 > div:nth-child(2)',\n pos: [470, 165, 340, 485],\n },\n {\n id: 'metric-3',\n target: '.columns-3 > div:nth-child(3)',\n pos: [860, 165, 340, 485],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n textAlign: center\n - id: metric-1\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 165, 340, 485]\n - id: metric-2\n target: '.columns-3 > div:nth-child(2)'\n pos: [470, 165, 340, 485]\n - id: metric-3\n target: '.columns-3 > div:nth-child(3)'\n pos: [860, 165, 340, 485]\n-->\n\n## 📊 Performance & Reliability Benchmarks\n\n<div class=\"columns-3\">\n<div>\n\n# ⚡ 99.99%\n### SLA Availability\nHigh-availability multi-region cluster with automated failover routing.\n\n</div>\n<div>\n\n# 🚀 15ms\n### P99 Latency\nSub-20ms roundtrip response time via distributed edge caching.\n\n</div>\n<div>\n\n# 🛡️ Zero\n### Unhandled Breaches\nFull SOC2 Type II compliance and end-to-end payload encryption.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Highlight the 15ms P99 latency target as the primary technical milestone.\n- Connect these metrics directly to the architecture decisions discussed next.\n-->`,\n },\n\n {\n id: 'process-flow',\n name: 'Architecture & Process Flow',\n category: 'diagram',\n description: 'Multi-stage workflow with responsive Mermaid diagram and phase summaries.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'diagram-box',\n target: 'pre.mermaid, .mermaid',\n pos: [80, 130, 1120, 310],\n },\n {\n id: 'summary-box',\n target: 'ul, p',\n pos: [80, 465, 1120, 205],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: diagram-box\n target: 'pre.mermaid, .mermaid'\n pos: [80, 130, 1120, 310]\n - id: summary-box\n target: 'ul, p'\n pos: [80, 465, 1120, 205]\n-->\n\n## 🔄 End-to-End Data Ingestion Pipeline\n\n\\`\\`\\`mermaid\ngraph LR\n A[1. Client Ingress] --> B[2. API Gateway]\n B --> C[3. Auth Verifier]\n C --> D[4. Distributed DB]\n style A fill:#0284c7,stroke:#38bdf8,stroke-width:2px,color:#fff\n style B fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#fff\n style C fill:#059669,stroke:#34d399,stroke-width:2px,color:#fff\n style D fill:#7c3aed,stroke:#a78bfa,stroke-width:2px,color:#fff\n\\`\\`\\`\n\n- **Ingress & Gateway:** Rate-limits traffic and applies reverse-proxy load balancing.\n- **Verification & Storage:** Decodes cryptographic JWT tokens before transactional write commit.\n\n<!--\nPresenter Notes:\n- Trace each hop across the diagram from left to right.\n- Ask: \"Where should rate limiting be applied to prevent DDoS attacks?\"\n-->`,\n },\n\n {\n id: 'quote-highlight',\n name: 'Core Principle & Quote Highlight',\n category: 'quote',\n description: 'Prominent quote callout for fundamental engineering rules or memorable mantras.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [100, 100, 1080, 80],\n fontSize: '2.2rem',\n textAlign: 'center',\n },\n {\n id: 'quote-box',\n target: 'blockquote',\n pos: [140, 230, 1000, 360],\n fontSize: '1.4rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [100, 100, 1080, 80]\n fontSize: 2.2rem\n textAlign: center\n - id: quote-box\n target: blockquote\n pos: [140, 230, 1000, 360]\n fontSize: 1.4rem\n-->\n\n## 💡 Foundational Architecture Principle\n\n> \"Simplicity is prerequisite for reliability. A well-engineered distributed system is one where a new engineer can understand the request flow within their first hour.\"\n> \n> — **Edsger W. Dijkstra**\n\n<!--\nPresenter Notes:\n- Pause for 5 seconds of silence to let the quote sink in.\n- Ask: \"How do our current architectural choices reflect this principle?\"\n-->`,\n },\n\n {\n id: 'quiz-checkpoint',\n name: 'Interactive Formative Checkpoint',\n category: 'assessment',\n description: 'Interactive multiple-choice diagnostic checkpoint with A/B/C/D voting options.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'question-callout',\n target: 'blockquote',\n pos: [80, 130, 1120, 110],\n fontSize: '1.2rem',\n },\n {\n id: 'options-list',\n target: 'ul',\n pos: [80, 260, 1120, 390],\n fontSize: '1.15rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: question-callout\n target: blockquote\n pos: [80, 130, 1120, 110]\n fontSize: 1.2rem\n - id: options-list\n target: ul\n pos: [80, 260, 1120, 390]\n fontSize: 1.15rem\n-->\n\n## 🎯 Formative Checkpoint: Verify Your Understanding\n\n> **Question:** In an event-driven architecture, which pattern guarantees that messages are never permanently lost if a downstream consumer crashes?\n\n- **A.** Direct HTTP POST call with a short 2-second timeout\n- **B.** Persistent Message Broker with Dead-Letter Queue (DLQ) & retry policy\n- **C.** In-memory client RAM cache without disk persistence\n- **D.** Discarding failed packets and prompting the user to re-submit\n\n<!--\nPresenter Notes:\n- Give students 30 seconds to vote on option A, B, C, or D.\n- Correct answer: B.\n- Explain why options A and C introduce catastrophic data loss in production.\n-->`,\n },\n\n {\n id: 'tiered-practice-3cards',\n name: 'Tiered Differentiation (Bronze / Silver / Gold)',\n category: 'content',\n description: 'Three progressive competency tiers allowing self-paced learning acceleration.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'tier-bronze',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 140, 350, 520],\n },\n {\n id: 'tier-silver',\n target: '.columns-3 > div:nth-child(2)',\n pos: [465, 140, 350, 520],\n },\n {\n id: 'tier-gold',\n target: '.columns-3 > div:nth-child(3)',\n pos: [850, 140, 350, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: tier-bronze\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 140, 350, 520]\n - id: tier-silver\n target: '.columns-3 > div:nth-child(2)'\n pos: [465, 140, 350, 520]\n - id: tier-gold\n target: '.columns-3 > div:nth-child(3)'\n pos: [850, 140, 350, 520]\n-->\n\n## 🛠️ Hands-On Challenge: 3-Tier Differentiation\n\n<div class=\"columns-3\">\n<div>\n\n### 🥉 Bronze Tier\n- Implement basic handler logic\n- Pass 3 baseline unit tests\n- *Goal: Foundational mastery*\n\n</div>\n<div>\n\n### 🥈 Silver Tier\n- Add boundary error handling\n- Enforce O(N) memory complexity\n- *Goal: Production-ready code*\n\n</div>\n<div>\n\n### 🥇 Gold Tier\n- Design distributed retry queue\n- Add 95% automated test coverage\n- *Goal: Architectural leadership*\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- All learners begin at Bronze to establish baseline competency.\n- Accelerate self-directed learners to Silver and Gold as they complete each tier.\n-->`,\n },\n\n {\n id: 'agenda-timeline',\n name: 'Session Agenda & Milestones',\n category: 'content',\n description: 'Structured time-budgeted agenda mapping stages to measurable deliverables.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'table-box',\n target: 'table',\n pos: [80, 140, 1120, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: table-box\n target: table\n pos: [80, 140, 1120, 520]\n-->\n\n## 🗺️ Milestone Roadmap & Time Budget\n\n| Allocated Time | Session Stage | Core Learning Focus | Deliverable Milestone |\n|:---:|---|---|---|\n| **05 mins** | Warm-Up | Real-World Scenario & Context | Identify system bottleneck |\n| **15 mins** | Concept Discovery | Core Architectural Patterns | Deconstruct message queue models |\n| **20 mins** | Hands-On Lab | Tiered Code Implementation | Complete Bronze + Silver tasks |\n| **05 mins** | Wrap-Up | Formative Checkpoint & Debrief | Consolidate key principles |\n\n<!--\nPresenter Notes:\n- Walk through the time budget so students understand expectations and pacing.\n-->`,\n },\n\n {\n id: 'takeaways-summary',\n name: 'Key Takeaways & Wrap-up',\n category: 'content',\n description: 'Three memorable synthesis takeaways with actionable next steps.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'list-box',\n target: 'ol',\n pos: [80, 150, 1120, 340],\n fontSize: '1.25rem',\n },\n {\n id: 'callout-next',\n target: 'blockquote',\n pos: [80, 520, 1120, 140],\n fontSize: '1.1rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: list-box\n target: ol\n pos: [80, 150, 1120, 340]\n fontSize: 1.25rem\n - id: callout-next\n target: blockquote\n pos: [80, 520, 1120, 140]\n fontSize: 1.1rem\n-->\n\n## 🏁 Key Takeaways & Action Items\n\n1. **Decouple Before Scaling:** Separate producer rate from consumer processing capacity.\n2. **Design for Failure:** Always configure retries, backoff intervals, and dead-letter queues.\n3. **Measure End-to-End:** Track P99 latency and error rates across all distributed boundaries.\n\n> 📝 **Next Action Item:** Complete the Silver Tier refactoring challenge before our next peer-review session.\n\n<!--\nPresenter Notes:\n- Deliver a crisp 2-minute wrap-up reinforcing the 3 core takeaways.\n- Acknowledge strong peer collaboration during the hands-on lab.\n-->`,\n },\n];\n\n/**\n * Find a preset by its unique ID\n */\nexport function getSlideLayoutPresetById(id: string): SlideLayoutPreset | undefined {\n return SLIDE_LAYOUT_PRESETS.find(p => p.id === id);\n}\n\n/**\n * Filter presets by category\n */\nexport function getSlideLayoutPresetsByCategory(category: SlideLayoutCategory): SlideLayoutPreset[] {\n return SLIDE_LAYOUT_PRESETS.filter(p => p.category === category);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/layout/serializer.ts","../src/core/layout/presets.ts"],"names":["yaml"],"mappings":"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","file":"chunk-IGCFC6GI.cjs","sourcesContent":["import yaml from 'js-yaml';\nimport type { SlideLayoutData } from '../../types.js';\n\n/**\n * Serialize a SlideLayoutData object into a Markdown HTML comment\n */\nexport function serializeLayoutToComment(layout: SlideLayoutData): string {\n if (!layout.boxes || layout.boxes.length === 0) return '';\n\n const cleanData = {\n boxes: layout.boxes.map(box => {\n const b: Record<string, unknown> = {\n id: box.id,\n target: box.target || `h1`,\n pos: [\n Math.round(box.pos[0]),\n Math.round(box.pos[1]),\n Math.round(box.pos[2]),\n Math.round(box.pos[3]),\n ],\n };\n if (box.fontSize) b.fontSize = box.fontSize;\n if (box.color) b.color = box.color;\n if (box.textAlign) b.textAlign = box.textAlign;\n if (box.style) b.style = box.style;\n return b;\n }),\n };\n\n const yamlStr = yaml.dump(cleanData, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n }).trim();\n\n return `<!-- layout:\\n ${yamlStr.split('\\n').join('\\n ')}\\n-->`;\n}\n\n/**\n * Split a Markdown presentation into individual slide strings,\n * properly handling frontmatter and code blocks.\n */\nexport function splitMarkdownSlides(markdown: string): {\n frontmatter: string | null;\n slides: string[];\n} {\n const lines = markdown.split('\\n');\n let frontmatter: string | null = null;\n const slideBuffers: string[][] = [];\n let currentBuffer: string[] = [];\n\n let inCodeFence = false;\n let inFrontmatter = false;\n let lineIdx = 0;\n\n // Check for leading frontmatter\n if (lines.length > 0 && lines[0].trim() === '---') {\n inFrontmatter = true;\n const fmBuffer: string[] = [lines[0]];\n lineIdx = 1;\n\n while (lineIdx < lines.length) {\n const line = lines[lineIdx];\n fmBuffer.push(line);\n if (line.trim() === '---') {\n frontmatter = fmBuffer.join('\\n');\n lineIdx++;\n break;\n }\n lineIdx++;\n }\n }\n\n // Iterate remaining lines to collect slides\n for (let i = lineIdx; i < lines.length; i++) {\n const line = lines[i];\n\n if (/^```/.test(line.trim())) {\n inCodeFence = !inCodeFence;\n currentBuffer.push(line);\n continue;\n }\n\n if (!inCodeFence && line.trim() === '---') {\n slideBuffers.push(currentBuffer);\n currentBuffer = [];\n continue;\n }\n\n currentBuffer.push(line);\n }\n\n slideBuffers.push(currentBuffer);\n\n const slides = slideBuffers.map(b => b.join('\\n'));\n return { frontmatter, slides };\n}\n\n/**\n * Update or insert a layout comment inside a specific slide's markdown\n */\nexport function updateSlideLayoutInMarkdown(\n markdown: string,\n slideIndex: number,\n layout: SlideLayoutData | null\n): string {\n const { frontmatter, slides } = splitMarkdownSlides(markdown);\n\n if (slideIndex < 0 || slideIndex >= slides.length) {\n return markdown;\n }\n\n let slideContent = slides[slideIndex];\n\n // Regex to detect existing layout comment\n const layoutCommentRegex = /<!--\\s*layout:\\s*[\\s\\S]*?-->/i;\n\n const newComment = layout && layout.boxes && layout.boxes.length > 0\n ? serializeLayoutToComment(layout)\n : '';\n\n if (layoutCommentRegex.test(slideContent)) {\n if (newComment) {\n slideContent = slideContent.replace(layoutCommentRegex, newComment);\n } else {\n slideContent = slideContent.replace(layoutCommentRegex, '').trim();\n }\n } else if (newComment) {\n // Prepend layout comment to the slide\n const trimmed = slideContent.trimStart();\n slideContent = `${newComment}\\n\\n${trimmed}`;\n }\n\n // If any boxes have text content that does not yet exist in the slide, append it\n if (layout && layout.boxes) {\n for (const box of layout.boxes) {\n if (box.content && box.content.trim() && !slideContent.includes(box.content.trim())) {\n const prefix = box.target === 'h1' ? '# ' : box.target === 'h2' ? '## ' : box.target === 'h3' ? '### ' : '';\n slideContent = `${slideContent.trimEnd()}\\n\\n${prefix}${box.content.trim()}\\n`;\n }\n }\n }\n\n slides[slideIndex] = slideContent;\n\n // Reassemble deck\n const joinedSlides = slides.join('\\n---\\n');\n if (frontmatter) {\n return `${frontmatter}\\n\\n${joinedSlides}`;\n }\n return joinedSlides;\n}\n\n/**\n * Update text content inside a specific slide's markdown.\n * Replaces oldText with newText within the given slideIndex.\n */\nexport function updateSlideTextInMarkdown(\n markdown: string,\n slideIndex: number,\n oldText: string,\n newText: string\n): string {\n const { frontmatter, slides } = splitMarkdownSlides(markdown);\n\n if (slideIndex < 0 || slideIndex >= slides.length) {\n return markdown;\n }\n\n const cleanOld = oldText.trim();\n const cleanNew = newText.trim();\n if (!cleanOld || cleanOld === cleanNew) return markdown;\n\n let slideContent = slides[slideIndex];\n\n // Try exact match first\n if (slideContent.includes(cleanOld)) {\n slideContent = slideContent.replace(cleanOld, cleanNew);\n } else {\n // Check line-by-line stripping markdown decorators (#, -, *, >, `)\n const lines = slideContent.split('\\n');\n let replaced = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const stripped = line.replace(/^[#\\s\\-\\*\\>]+/, '').replace(/[*_`]/g, '').trim();\n if (stripped === cleanOld) {\n const prefixMatch = line.match(/^([#\\s\\-\\*\\>]+)/);\n const prefix = prefixMatch ? prefixMatch[1] : '';\n lines[i] = `${prefix}${cleanNew}`;\n replaced = true;\n break;\n }\n }\n\n if (replaced) {\n slideContent = lines.join('\\n');\n } else {\n // Escape regex characters and try matching regex\n const escaped = cleanOld.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escaped, 'i');\n if (regex.test(slideContent)) {\n slideContent = slideContent.replace(regex, cleanNew);\n } else {\n // Fuzzy word match\n const words = cleanOld.split(/\\s+/).filter(w => w.length > 2);\n if (words.length > 0) {\n const pattern = words.map(w => w.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('[\\\\s\\\\S]*?');\n const fuzzyRegex = new RegExp(pattern, 'i');\n if (fuzzyRegex.test(slideContent)) {\n slideContent = slideContent.replace(fuzzyRegex, cleanNew);\n }\n }\n }\n }\n }\n\n slides[slideIndex] = slideContent;\n\n const joinedSlides = slides.join('\\n---\\n');\n if (frontmatter) {\n return `${frontmatter}\\n\\n${joinedSlides}`;\n }\n return joinedSlides;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit — Slide Layout Presets\n// Catalog of battle-tested single-slide layout templates with 1280x720 canvas coordinates\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { SlideLayoutData } from '../../types.js';\n\nexport type SlideLayoutCategory =\n | 'cover'\n | 'content'\n | 'split'\n | 'code'\n | 'metrics'\n | 'diagram'\n | 'quote'\n | 'assessment';\n\nexport interface SlideLayoutPreset {\n id: string;\n name: string;\n category: SlideLayoutCategory;\n description: string;\n layout: SlideLayoutData;\n markdownSnippet: string;\n}\n\nexport const SLIDE_LAYOUT_PRESETS: SlideLayoutPreset[] = [\n {\n id: 'title-hero',\n name: 'Title & Speaker Cover',\n category: 'cover',\n description: 'High-impact opening slide with large title, subtitle, and speaker credentials.',\n layout: {\n boxes: [\n {\n id: 'title',\n target: 'h1',\n pos: [100, 180, 1080, 140],\n fontSize: '3rem',\n textAlign: 'center',\n },\n {\n id: 'subtitle',\n target: 'h3',\n pos: [100, 350, 1080, 70],\n fontSize: '1.5rem',\n textAlign: 'center',\n },\n {\n id: 'speaker-meta',\n target: 'p',\n pos: [100, 460, 1080, 80],\n fontSize: '1.1rem',\n textAlign: 'center',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: title\n target: h1\n pos: [100, 180, 1080, 140]\n fontSize: 3rem\n textAlign: center\n - id: subtitle\n target: h3\n pos: [100, 350, 1080, 70]\n fontSize: 1.5rem\n textAlign: center\n - id: speaker-meta\n target: p\n pos: [100, 460, 1080, 80]\n fontSize: 1.1rem\n textAlign: center\n-->\n\n# 🚀 Engineering Scalable Cloud Systems\n### Principles, Bottlenecks, and Real-World Architecture Patterns\n\n**Presenter:** Senior Systems Architect | **Duration:** 45 mins | **Level:** Intermediate\n\n<!--\nPresenter Notes:\n- Welcome the audience and outline today's primary engineering goals.\n- Spark curiosity with an opening hook about scaling under high concurrency.\n-->`,\n },\n\n {\n id: 'two-column-split',\n name: 'Two-Column Comparison',\n category: 'split',\n description: 'Balanced side-by-side comparison for legacy vs modern patterns or pros vs cons.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'col-left',\n target: '.columns-2 > div:first-child',\n pos: [80, 150, 530, 510],\n },\n {\n id: 'col-right',\n target: '.columns-2 > div:last-child',\n pos: [670, 150, 530, 510],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: col-left\n target: '.columns-2 > div:first-child'\n pos: [80, 150, 530, 510]\n - id: col-right\n target: '.columns-2 > div:last-child'\n pos: [670, 150, 530, 510]\n-->\n\n## ⚖️ Monolithic Polling vs Event-Driven Architecture\n\n<div class=\"columns-2\">\n<div>\n\n### 🔴 Legacy Polling\n- Heavy database CPU overhead on idle cycles\n- High network latency between updates\n- Prone to cascading timeouts during spikes\n\n</div>\n<div>\n\n### 🟢 Event-Driven Streams\n- Real-time event propagation via webhooks\n- Zero idle compute waste with serverless consumers\n- Automatic backpressure and queue isolation\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Emphasize the core failure mode of periodic polling under sudden load spikes.\n- Ask the room if anyone has experienced database lockups caused by polling loops.\n-->`,\n },\n\n {\n id: 'code-explainer',\n name: 'Code Walkthrough & Analysis',\n category: 'code',\n description: 'Syntax-highlighted code block on the left with step-by-step key annotations on the right.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'code-box',\n target: '.columns-2 > div:first-child',\n pos: [80, 135, 630, 535],\n },\n {\n id: 'notes-box',\n target: '.columns-2 > div:last-child',\n pos: [740, 135, 460, 535],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: code-box\n target: '.columns-2 > div:first-child'\n pos: [80, 135, 630, 535]\n - id: notes-box\n target: '.columns-2 > div:last-child'\n pos: [740, 135, 460, 535]\n-->\n\n## 💻 Robust Async Transaction Pipeline\n\n<div class=\"columns-2\">\n<div>\n\n\\`\\`\\`ts\n// Process payment with idempotency guarantee\nexport async function processPayment(order: Order) {\n const isValid = await validateOrder(order);\n if (!isValid) throw new Error(\"ValidationFailed\");\n\n const receipt = await chargeCard(order);\n return sendConfirmation(receipt);\n}\n\\`\\`\\`\n\n</div>\n<div>\n\n### 🔍 Key Engineering Invariants:\n1. **Early Guard Clause:** Validates payload immediately at line 3 before triggering external calls.\n2. **Deterministic Sequence:** Enforces strict order of operations using native \\`await\\`.\n3. **Audit Trail:** Returns immutable payment receipt upon successful execution.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Walk through lines 1 to 7 sequentially.\n- Cold-call check: \"What happens if line 6 throws a network timeout?\"\n- Cognitive scaffolding: Highlight the importance of idempotency keys in payment APIs.\n-->`,\n },\n\n {\n id: 'metrics-3-card',\n name: '3-Metric Key Results Grid',\n category: 'metrics',\n description: 'Three high-visibility KPI stat cards for benchmarks, impact, and success criteria.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n textAlign: 'center',\n },\n {\n id: 'metric-1',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 165, 340, 485],\n },\n {\n id: 'metric-2',\n target: '.columns-3 > div:nth-child(2)',\n pos: [470, 165, 340, 485],\n },\n {\n id: 'metric-3',\n target: '.columns-3 > div:nth-child(3)',\n pos: [860, 165, 340, 485],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n textAlign: center\n - id: metric-1\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 165, 340, 485]\n - id: metric-2\n target: '.columns-3 > div:nth-child(2)'\n pos: [470, 165, 340, 485]\n - id: metric-3\n target: '.columns-3 > div:nth-child(3)'\n pos: [860, 165, 340, 485]\n-->\n\n## 📊 Performance & Reliability Benchmarks\n\n<div class=\"columns-3\">\n<div>\n\n# ⚡ 99.99%\n### SLA Availability\nHigh-availability multi-region cluster with automated failover routing.\n\n</div>\n<div>\n\n# 🚀 15ms\n### P99 Latency\nSub-20ms roundtrip response time via distributed edge caching.\n\n</div>\n<div>\n\n# 🛡️ Zero\n### Unhandled Breaches\nFull SOC2 Type II compliance and end-to-end payload encryption.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Highlight the 15ms P99 latency target as the primary technical milestone.\n- Connect these metrics directly to the architecture decisions discussed next.\n-->`,\n },\n\n {\n id: 'process-flow',\n name: 'Architecture & Process Flow',\n category: 'diagram',\n description: 'Multi-stage workflow with responsive Mermaid diagram and phase summaries.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'diagram-box',\n target: 'pre.mermaid, .mermaid',\n pos: [80, 130, 1120, 310],\n },\n {\n id: 'summary-box',\n target: 'ul, p',\n pos: [80, 465, 1120, 205],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: diagram-box\n target: 'pre.mermaid, .mermaid'\n pos: [80, 130, 1120, 310]\n - id: summary-box\n target: 'ul, p'\n pos: [80, 465, 1120, 205]\n-->\n\n## 🔄 End-to-End Data Ingestion Pipeline\n\n\\`\\`\\`mermaid\ngraph LR\n A[1. Client Ingress] --> B[2. API Gateway]\n B --> C[3. Auth Verifier]\n C --> D[4. Distributed DB]\n style A fill:#0284c7,stroke:#38bdf8,stroke-width:2px,color:#fff\n style B fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#fff\n style C fill:#059669,stroke:#34d399,stroke-width:2px,color:#fff\n style D fill:#7c3aed,stroke:#a78bfa,stroke-width:2px,color:#fff\n\\`\\`\\`\n\n- **Ingress & Gateway:** Rate-limits traffic and applies reverse-proxy load balancing.\n- **Verification & Storage:** Decodes cryptographic JWT tokens before transactional write commit.\n\n<!--\nPresenter Notes:\n- Trace each hop across the diagram from left to right.\n- Ask: \"Where should rate limiting be applied to prevent DDoS attacks?\"\n-->`,\n },\n\n {\n id: 'quote-highlight',\n name: 'Core Principle & Quote Highlight',\n category: 'quote',\n description: 'Prominent quote callout for fundamental engineering rules or memorable mantras.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [100, 100, 1080, 80],\n fontSize: '2.2rem',\n textAlign: 'center',\n },\n {\n id: 'quote-box',\n target: 'blockquote',\n pos: [140, 230, 1000, 360],\n fontSize: '1.4rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [100, 100, 1080, 80]\n fontSize: 2.2rem\n textAlign: center\n - id: quote-box\n target: blockquote\n pos: [140, 230, 1000, 360]\n fontSize: 1.4rem\n-->\n\n## 💡 Foundational Architecture Principle\n\n> \"Simplicity is prerequisite for reliability. A well-engineered distributed system is one where a new engineer can understand the request flow within their first hour.\"\n> \n> — **Edsger W. Dijkstra**\n\n<!--\nPresenter Notes:\n- Pause for 5 seconds of silence to let the quote sink in.\n- Ask: \"How do our current architectural choices reflect this principle?\"\n-->`,\n },\n\n {\n id: 'quiz-checkpoint',\n name: 'Interactive Formative Checkpoint',\n category: 'assessment',\n description: 'Interactive multiple-choice diagnostic checkpoint with A/B/C/D voting options.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'question-callout',\n target: 'blockquote',\n pos: [80, 130, 1120, 110],\n fontSize: '1.2rem',\n },\n {\n id: 'options-list',\n target: 'ul',\n pos: [80, 260, 1120, 390],\n fontSize: '1.15rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: question-callout\n target: blockquote\n pos: [80, 130, 1120, 110]\n fontSize: 1.2rem\n - id: options-list\n target: ul\n pos: [80, 260, 1120, 390]\n fontSize: 1.15rem\n-->\n\n## 🎯 Formative Checkpoint: Verify Your Understanding\n\n> **Question:** In an event-driven architecture, which pattern guarantees that messages are never permanently lost if a downstream consumer crashes?\n\n- **A.** Direct HTTP POST call with a short 2-second timeout\n- **B.** Persistent Message Broker with Dead-Letter Queue (DLQ) & retry policy\n- **C.** In-memory client RAM cache without disk persistence\n- **D.** Discarding failed packets and prompting the user to re-submit\n\n<!--\nPresenter Notes:\n- Give students 30 seconds to vote on option A, B, C, or D.\n- Correct answer: B.\n- Explain why options A and C introduce catastrophic data loss in production.\n-->`,\n },\n\n {\n id: 'tiered-practice-3cards',\n name: 'Tiered Differentiation (Bronze / Silver / Gold)',\n category: 'content',\n description: 'Three progressive competency tiers allowing self-paced learning acceleration.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'tier-bronze',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 140, 350, 520],\n },\n {\n id: 'tier-silver',\n target: '.columns-3 > div:nth-child(2)',\n pos: [465, 140, 350, 520],\n },\n {\n id: 'tier-gold',\n target: '.columns-3 > div:nth-child(3)',\n pos: [850, 140, 350, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: tier-bronze\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 140, 350, 520]\n - id: tier-silver\n target: '.columns-3 > div:nth-child(2)'\n pos: [465, 140, 350, 520]\n - id: tier-gold\n target: '.columns-3 > div:nth-child(3)'\n pos: [850, 140, 350, 520]\n-->\n\n## 🛠️ Hands-On Challenge: 3-Tier Differentiation\n\n<div class=\"columns-3\">\n<div>\n\n### 🥉 Bronze Tier\n- Implement basic handler logic\n- Pass 3 baseline unit tests\n- *Goal: Foundational mastery*\n\n</div>\n<div>\n\n### 🥈 Silver Tier\n- Add boundary error handling\n- Enforce O(N) memory complexity\n- *Goal: Production-ready code*\n\n</div>\n<div>\n\n### 🥇 Gold Tier\n- Design distributed retry queue\n- Add 95% automated test coverage\n- *Goal: Architectural leadership*\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- All learners begin at Bronze to establish baseline competency.\n- Accelerate self-directed learners to Silver and Gold as they complete each tier.\n-->`,\n },\n\n {\n id: 'agenda-timeline',\n name: 'Session Agenda & Milestones',\n category: 'content',\n description: 'Structured time-budgeted agenda mapping stages to measurable deliverables.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'table-box',\n target: 'table',\n pos: [80, 140, 1120, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: table-box\n target: table\n pos: [80, 140, 1120, 520]\n-->\n\n## 🗺️ Milestone Roadmap & Time Budget\n\n| Allocated Time | Session Stage | Core Learning Focus | Deliverable Milestone |\n|:---:|---|---|---|\n| **05 mins** | Warm-Up | Real-World Scenario & Context | Identify system bottleneck |\n| **15 mins** | Concept Discovery | Core Architectural Patterns | Deconstruct message queue models |\n| **20 mins** | Hands-On Lab | Tiered Code Implementation | Complete Bronze + Silver tasks |\n| **05 mins** | Wrap-Up | Formative Checkpoint & Debrief | Consolidate key principles |\n\n<!--\nPresenter Notes:\n- Walk through the time budget so students understand expectations and pacing.\n-->`,\n },\n\n {\n id: 'takeaways-summary',\n name: 'Key Takeaways & Wrap-up',\n category: 'content',\n description: 'Three memorable synthesis takeaways with actionable next steps.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'list-box',\n target: 'ol',\n pos: [80, 150, 1120, 340],\n fontSize: '1.25rem',\n },\n {\n id: 'callout-next',\n target: 'blockquote',\n pos: [80, 520, 1120, 140],\n fontSize: '1.1rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: list-box\n target: ol\n pos: [80, 150, 1120, 340]\n fontSize: 1.25rem\n - id: callout-next\n target: blockquote\n pos: [80, 520, 1120, 140]\n fontSize: 1.1rem\n-->\n\n## 🏁 Key Takeaways & Action Items\n\n1. **Decouple Before Scaling:** Separate producer rate from consumer processing capacity.\n2. **Design for Failure:** Always configure retries, backoff intervals, and dead-letter queues.\n3. **Measure End-to-End:** Track P99 latency and error rates across all distributed boundaries.\n\n> 📝 **Next Action Item:** Complete the Silver Tier refactoring challenge before our next peer-review session.\n\n<!--\nPresenter Notes:\n- Deliver a crisp 2-minute wrap-up reinforcing the 3 core takeaways.\n- Acknowledge strong peer collaboration during the hands-on lab.\n-->`,\n },\n];\n\n/**\n * Find a preset by its unique ID\n */\nexport function getSlideLayoutPresetById(id: string): SlideLayoutPreset | undefined {\n return SLIDE_LAYOUT_PRESETS.find(p => p.id === id);\n}\n\n/**\n * Filter presets by category\n */\nexport function getSlideLayoutPresetsByCategory(category: SlideLayoutCategory): SlideLayoutPreset[] {\n return SLIDE_LAYOUT_PRESETS.filter(p => p.category === category);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/arrow-converter.ts","../src/core/source-extractor.ts","../src/themes/dark.ts","../src/themes/light.ts","../src/themes/navy.ts","../src/themes/scoped-css.ts","../src/themes/index.ts","../src/plugins/mermaid.ts","../src/plugins/shiki.ts","../src/vclick/preprocessor.ts","../src/vclick/postprocessor.ts","../src/vclick/click-css.ts","../src/core/layout/parser.ts","../src/core/layout/css-generator.ts","../src/core/render.ts"],"names":["generateScopedCss","decodeHtmlEntities","totalClicks"],"mappings":"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","file":"chunk-JOW4QWKF.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════════════════════\n// Arrow Converter — Text arrows → Unicode arrows\n// Ported from: apps/web/app/api/render-marp/route.ts\n// ═══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Converts text arrows (->, -->, --->, =>, ==>, <->, etc.) into clean Unicode\n * arrows while strictly preserving YAML frontmatter, code fences, inline code,\n * HTML comments, and style tags.\n */\nexport function convertTextArrows(text: string): string {\n if (!text) return '';\n\n let content = text;\n let yamlFrontmatter = '';\n\n // 1. Preserve YAML frontmatter at the beginning of markdown (e.g. --- ... ---)\n const yamlMatch = content.match(/^(---\\r?\\n[\\s\\S]*?\\r?\\n---(?:\\r?\\n|$))/);\n if (yamlMatch?.[1]) {\n yamlFrontmatter = yamlMatch[1];\n content = content.slice(yamlFrontmatter.length);\n }\n\n // 2. Split by code fences, inline code, HTML comments, and style tags\n const segments = content.split(/(```[\\s\\S]*?```|`[^`\\n]+`|<!--[\\s\\S]*?-->|<style[\\s\\S]*?<\\/style>)/g);\n\n const processedContent = segments\n .map((segment) => {\n // If it's a code block, inline code, HTML comment, or style tag, leave untouched\n if (\n segment.startsWith('```') ||\n segment.startsWith('`') ||\n segment.startsWith('<!--') ||\n segment.startsWith('<style')\n ) {\n return segment;\n }\n\n return (\n segment\n // Bi-directional double arrows\n .replace(/<={3,}>/g, '⟺')\n .replace(/<==>/g, '⟺')\n .replace(/<=>/g, '⇔')\n // Bi-directional single arrows\n .replace(/<-{3,}>/g, '⟷')\n .replace(/<-->/g, '⟷')\n .replace(/<->/g, '↔')\n // Long right double arrows\n .replace(/={3,}>/g, '⟹')\n .replace(/==>/g, '⟹')\n .replace(/(^|\\s)=>(?=\\s|$|[.,:;!?\\)])/g, '$1⇒')\n // Long left double arrows\n .replace(/<={3,}/g, '⟸')\n .replace(/<==/g, '⟸')\n .replace(/(^|\\s)<=(?=\\s|$|[.,:;!?\\)])/g, '$1⇐')\n // Long right single arrows (----> -> ⟶, ---> -> ⟶, --> -> ⟶, -> -> →)\n .replace(/-{3,}>/g, '⟶')\n .replace(/-->/g, '⟶')\n .replace(/(^|\\s)->(?=\\s|$|[.,:;!?\\)])/g, '$1→')\n // Long left single arrows (<---- -> ⟵, <--- -> ⟵, <-- -> ⟵, <- -> ←)\n .replace(/<-{3,}/g, '⟵')\n .replace(/<--/g, '⟵')\n .replace(/(^|\\s)<-(?=\\s|$|[.,:;!?\\)])/g, '$1←')\n // LaTeX math arrows\n .replace(/\\$\\\\rightarrow\\$/g, '→')\n .replace(/\\$\\\\leftarrow\\$/g, '←')\n .replace(/\\$\\\\Rightarrow\\$/g, '⇒')\n .replace(/\\$\\\\Leftarrow\\$/g, '⇐')\n .replace(/\\\\rightarrow/g, '→')\n .replace(/\\\\leftarrow/g, '←')\n .replace(/\\\\Rightarrow/g, '⇒')\n .replace(/\\\\Leftarrow/g, '⇐')\n );\n })\n .join('');\n\n return yamlFrontmatter + processedContent;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Source Extractor — Extract clean Marp source from markdown wrappers\n// Ported from: apps/web/components/MarpSlideViewer.tsx\n// ═══════════════════════════════════════════════════════════════════════════════\n\n/**\n * Extracts clean Marp source from markdown that may be wrapped in code fences\n * or preceded by conversational preamble.\n *\n * Handles:\n * - Wrapped in ```markdown ... ``` or ```marp ... ``` or ```md ... ```\n * - Conversational preamble before the first frontmatter ---\n */\nexport function extractMarpSource(raw: string): string {\n if (!raw) return '';\n let text = raw.trim();\n\n // If wrapped in ```markdown ... ``` or ```marp ... ``` or ```md ... ```\n const codeBlockMatch = text.match(/^```(?:markdown|marp|md)?\\s*\\n([\\s\\S]*?)\\n```\\s*$/i);\n if (codeBlockMatch?.[1]) {\n text = codeBlockMatch[1].trim();\n }\n\n // If there is conversational preamble before the first frontmatter ---\n const firstFrontmatter = text.search(/^---\\s*$/m);\n if (firstFrontmatter > 0 && text.includes('marp: true')) {\n text = text.substring(firstFrontmatter).trim();\n }\n\n return text;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Dark Theme — Studio Dark (#14151b)\n// Ported from: apps/web/components/MarpSlideViewer.tsx scopedSlideStyles\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { ThemeTokens } from '../types.js';\n\nexport const darkThemeTokens: ThemeTokens = {\n // Surfaces\n background: '#14151b',\n cardBorder: '1px solid rgba(255, 255, 255, 0.08)',\n cardShadow: '0 8px 24px -4px rgba(0, 0, 0, 0.4)',\n\n // Typography — Calm single-hue readability (Zinc-200)\n text: '#cbd5e1',\n heading: '#e4e4e7',\n bold: '#ffffff',\n link: '#60a5fa',\n meta: '#94a3b8',\n\n // Code\n codeBg: '#0c0c0e',\n codeText: '#e4e4e7',\n inlineCodeBg: '#0c0c0e',\n inlineCodeText: '#e4e4e7',\n codeBorder: 'rgba(255, 255, 255, 0.08)',\n\n // Blockquotes\n quoteBg: 'rgba(255, 255, 255, 0.04)',\n quoteBorder: 'rgba(255, 255, 255, 0.15)',\n quoteText: '#e4e4e7',\n\n // Tables\n tableHeaderBg: 'rgba(255, 255, 255, 0.04)',\n tableBorder: 'rgba(255, 255, 255, 0.08)',\n tableRowHover: 'rgba(255, 255, 255, 0.02)',\n tableText: '#cbd5e1',\n tableEvenRow: 'rgba(255, 255, 255, 0.03)',\n\n // Mermaid\n mermaidDark: true,\n mermaidVariables: {\n darkMode: 'true',\n background: '#18181b',\n primaryColor: '#27272a',\n primaryTextColor: '#f4f4f5',\n primaryBorderColor: 'rgba(255, 255, 255, 0.2)',\n lineColor: '#71717a',\n secondaryColor: '#1e1e24',\n tertiaryColor: '#121214',\n textColor: '#f4f4f5',\n mainBkg: '#1f1f23',\n nodeBorder: 'rgba(255, 255, 255, 0.22)',\n clusterBkg: 'rgba(255, 255, 255, 0.02)',\n clusterBorder: 'rgba(255, 255, 255, 0.12)',\n titleColor: '#f4f4f5',\n edgeLabelBackground: '#27272a',\n actorBorder: 'rgba(255, 255, 255, 0.2)',\n actorBkg: '#27272a',\n actorTextColor: '#f4f4f5',\n actorLineColor: '#71717a',\n signalColor: '#f4f4f5',\n signalTextColor: '#f4f4f5',\n },\n mermaidThemeCSS: `\n svg, svg *, g, text, tspan, .node, .node *, .edgeLabel, .edgeLabel *, .cluster, .cluster * {\n clip-path: none !important;\n -webkit-clip-path: none !important;\n overflow: visible !important;\n }\n .node rect, .node circle, .node ellipse, .node polygon, .node path {\n stroke-width: 1.5px !important;\n rx: 8px !important;\n ry: 8px !important;\n }\n .node text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .edgeLabel rect {\n rx: 5px !important;\n ry: 5px !important;\n fill: #27272a !important;\n stroke: rgba(255, 255, 255, 0.12) !important;\n stroke-width: 1px !important;\n }\n .edgeLabel text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n fill: #e4e4e7 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .cluster rect {\n rx: 10px !important;\n ry: 10px !important;\n fill: rgba(255, 255, 255, 0.02) !important;\n stroke: rgba(255, 255, 255, 0.12) !important;\n stroke-width: 1.5px !important;\n }\n .cluster text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n fill: #a1a1aa !important;\n }\n .edgePath path {\n stroke: #71717a !important;\n stroke-width: 1.5px !important;\n }\n .arrowheadPath {\n fill: #71717a !important;\n }\n `,\n};\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Light Theme — Keynote White (#ffffff)\n// Ported from: apps/web/components/MarpSlideViewer.tsx scopedSlideStyles\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { ThemeTokens } from '../types.js';\n\nexport const lightThemeTokens: ThemeTokens = {\n // Surfaces\n background: '#ffffff',\n cardBorder: '1px solid rgba(0, 0, 0, 0.08)',\n cardShadow: '0 4px 16px -2px rgba(0, 0, 0, 0.05), 0 1px 2px rgba(0, 0, 0, 0.03)',\n\n // Typography — Calm single-hue readability (Zinc-800)\n text: '#3f3f46',\n heading: '#27272a',\n bold: '#18181b',\n link: '#2563eb',\n meta: '#71717a',\n\n // Code\n codeBg: '#f4f4f5',\n codeText: '#27272a',\n inlineCodeBg: '#f4f4f5',\n inlineCodeText: '#27272a',\n codeBorder: 'rgba(0, 0, 0, 0.08)',\n\n // Blockquotes\n quoteBg: '#f8f9fa',\n quoteBorder: 'rgba(0, 0, 0, 0.15)',\n quoteText: '#27272a',\n\n // Tables\n tableHeaderBg: '#f8fafc',\n tableBorder: '#e2e8f0',\n tableRowHover: 'rgba(0, 0, 0, 0.02)',\n tableText: '#3f3f46',\n tableEvenRow: '#f8fafc',\n\n // Mermaid\n mermaidDark: false,\n mermaidVariables: {\n darkMode: 'false',\n background: '#ffffff',\n primaryColor: '#f4f4f6',\n primaryTextColor: '#18181b',\n primaryBorderColor: 'rgba(0, 0, 0, 0.15)',\n lineColor: '#94a3b8',\n secondaryColor: '#fafafa',\n tertiaryColor: '#f4f4f5',\n textColor: '#18181b',\n mainBkg: '#f8fafc',\n nodeBorder: 'rgba(0, 0, 0, 0.15)',\n clusterBkg: 'rgba(0, 0, 0, 0.015)',\n clusterBorder: 'rgba(0, 0, 0, 0.1)',\n titleColor: '#18181b',\n edgeLabelBackground: '#f1f5f9',\n actorBorder: 'rgba(0, 0, 0, 0.2)',\n actorBkg: '#f4f4f6',\n actorTextColor: '#18181b',\n actorLineColor: '#94a3b8',\n signalColor: '#18181b',\n signalTextColor: '#18181b',\n },\n mermaidThemeCSS: `\n svg, svg *, g, text, tspan, .node, .node *, .edgeLabel, .edgeLabel *, .cluster, .cluster * {\n clip-path: none !important;\n -webkit-clip-path: none !important;\n overflow: visible !important;\n }\n .node rect, .node circle, .node ellipse, .node polygon, .node path {\n stroke-width: 1.5px !important;\n rx: 8px !important;\n ry: 8px !important;\n }\n .node text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .edgeLabel rect {\n rx: 5px !important;\n ry: 5px !important;\n fill: #f1f5f9 !important;\n stroke: rgba(0, 0, 0, 0.12) !important;\n stroke-width: 1px !important;\n }\n .edgeLabel text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n fill: #334155 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .cluster rect {\n rx: 10px !important;\n ry: 10px !important;\n fill: rgba(0, 0, 0, 0.015) !important;\n stroke: rgba(0, 0, 0, 0.12) !important;\n stroke-width: 1.5px !important;\n }\n .cluster text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n fill: #64748b !important;\n }\n .edgePath path {\n stroke: #94a3b8 !important;\n stroke-width: 1.5px !important;\n }\n .arrowheadPath {\n fill: #94a3b8 !important;\n }\n `,\n};\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Navy Theme — Deep Navy (#0f172a)\n// Ported from: apps/web/components/MarpSlideViewer.tsx scopedSlideStyles\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { ThemeTokens } from '../types.js';\n\nexport const navyThemeTokens: ThemeTokens = {\n // Surfaces\n background: '#0f172a',\n cardBorder: '1px solid rgba(255, 255, 255, 0.08)',\n cardShadow: '0 8px 24px -4px rgba(0, 0, 0, 0.4)',\n\n // Typography — Calm single-hue readability (Zinc-200)\n text: '#94a3b8',\n heading: '#f8fafc',\n bold: '#ffffff',\n link: '#38bdf8',\n meta: '#94a3b8',\n\n // Code\n codeBg: '#020617',\n codeText: '#e4e4e7',\n inlineCodeBg: '#020617',\n inlineCodeText: '#e4e4e7',\n codeBorder: 'rgba(255, 255, 255, 0.08)',\n\n // Blockquotes — Navy uses sky tint\n quoteBg: 'rgba(56, 189, 248, 0.06)',\n quoteBorder: 'rgba(255, 255, 255, 0.15)',\n quoteText: '#e4e4e7',\n\n // Tables\n tableHeaderBg: 'rgba(255, 255, 255, 0.04)',\n tableBorder: 'rgba(255, 255, 255, 0.08)',\n tableRowHover: 'rgba(255, 255, 255, 0.02)',\n tableText: '#94a3b8',\n tableEvenRow: 'rgba(56, 189, 248, 0.03)',\n\n // Mermaid — reuse dark config with navy tint\n mermaidDark: true,\n mermaidVariables: {\n darkMode: 'true',\n background: '#18181b',\n primaryColor: '#27272a',\n primaryTextColor: '#f4f4f5',\n primaryBorderColor: 'rgba(255, 255, 255, 0.2)',\n lineColor: '#71717a',\n secondaryColor: '#1e1e24',\n tertiaryColor: '#121214',\n textColor: '#f4f4f5',\n mainBkg: '#1f1f23',\n nodeBorder: 'rgba(255, 255, 255, 0.22)',\n clusterBkg: 'rgba(255, 255, 255, 0.02)',\n clusterBorder: 'rgba(255, 255, 255, 0.12)',\n titleColor: '#f4f4f5',\n edgeLabelBackground: '#27272a',\n actorBorder: 'rgba(255, 255, 255, 0.2)',\n actorBkg: '#27272a',\n actorTextColor: '#f4f4f5',\n actorLineColor: '#71717a',\n signalColor: '#f4f4f5',\n signalTextColor: '#f4f4f5',\n },\n mermaidThemeCSS: `\n svg, svg *, g, text, tspan, .node, .node *, .edgeLabel, .edgeLabel *, .cluster, .cluster * {\n clip-path: none !important;\n -webkit-clip-path: none !important;\n overflow: visible !important;\n }\n .node rect, .node circle, .node ellipse, .node polygon, .node path {\n stroke-width: 1.5px !important;\n rx: 8px !important;\n ry: 8px !important;\n }\n .node text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .edgeLabel rect {\n rx: 5px !important;\n ry: 5px !important;\n fill: #27272a !important;\n stroke: rgba(255, 255, 255, 0.12) !important;\n stroke-width: 1px !important;\n }\n .edgeLabel text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n fill: #e4e4e7 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .cluster rect {\n rx: 10px !important;\n ry: 10px !important;\n fill: rgba(255, 255, 255, 0.02) !important;\n stroke: rgba(255, 255, 255, 0.12) !important;\n stroke-width: 1.5px !important;\n }\n .cluster text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n fill: #a1a1aa !important;\n }\n .edgePath path {\n stroke: #71717a !important;\n stroke-width: 1.5px !important;\n }\n .arrowheadPath {\n fill: #71717a !important;\n }\n `,\n};\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Scoped CSS Generator — Theme-specific CSS for 1280x720 Marp canvas\n// Ported from: apps/web/components/MarpSlideViewer.tsx scopedSlideStyles\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { ThemeTokens } from '../types.js';\n\n/**\n * Sanitize a string for safe use as a CSS selector (ID).\n * Escapes characters that are special in CSS selectors.\n */\nfunction sanitizeCssId(id: string): string {\n // CSS.escape() is available in modern browsers and Node 20+\n // Fallback: manual escape for common problematic chars\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') {\n return CSS.escape(id);\n }\n return id.replace(/([\"'\\\\()\\[\\]#.;,{}\\s!@#$%^&*=+|<>?/~`])/g, '\\\\$1');\n}\n\n/**\n * Generate scoped CSS string for a given theme.\n * This CSS overrides Marp defaults for 1280×720 canvas typography using\n * the container ID for CSS isolation.\n */\nexport function generateScopedCss(tokens: ThemeTokens, containerId: string = 'marp-container'): string {\n const safeId = sanitizeCssId(containerId);\n return `\n/* ── Isolation: Scope all styles to #${safeId} ── */\n#${safeId} {\n width: 100%;\n}\n\n/* Base Slide Card Styling (Thin hairline border) */\n#${safeId} svg[data-marpit-svg] {\n background-color: ${tokens.background} !important;\n border-radius: 12px !important;\n border: ${tokens.cardBorder} !important;\n box-shadow: ${tokens.cardShadow} !important;\n overflow: hidden !important;\n transition: border-color 0.15s ease;\n}\n\n/* Slide Inner Section (1280x720 Canvas Coordinate Scale) */\n#${safeId} section:not([data-background-color]):not([style*=\"background\"]),\n#${safeId} foreignObject > section:not([data-background-color]):not([style*=\"background\"]) {\n background-color: ${tokens.background} !important;\n}\n\n#${safeId} section,\n#${safeId} foreignObject > section {\n color: ${tokens.text} !important;\n font-family: var(--font-sans), Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n padding: 50px 60px !important;\n box-sizing: border-box !important;\n display: flex !important;\n flex-direction: column !important;\n justify-content: center !important;\n}\n\n/* Force inline display for emojis, twemojis, and inline text emojis */\n#${safeId} section img.emoji,\n#${safeId} section img[data-marp-twemoji],\n#${safeId} section .emoji {\n display: inline-block !important;\n vertical-align: -0.15em !important;\n height: 1.15em !important;\n width: 1.15em !important;\n margin: 0 0.15em !important;\n}\n\n/* Mermaid Diagram styling inside Marp Canvas */\n#${safeId} section .marp-mermaid-rendered {\n width: 100% !important;\n display: flex !important;\n justify-content: center !important;\n align-items: center !important;\n margin: 16px 0 !important;\n}\n\n#${safeId} section .marp-mermaid-rendered svg {\n display: block !important;\n max-width: 100% !important;\n max-height: 420px !important;\n width: auto !important;\n height: auto !important;\n}\n\n#${safeId} section .marp-mermaid-rendered svg * {\n clip-path: none !important;\n -webkit-clip-path: none !important;\n}\n\n#${safeId} section .katex,\n#${safeId} section .katex-html {\n display: inline-block !important;\n vertical-align: baseline !important;\n}\n\n#${safeId} section strong,\n#${safeId} section b,\n#${safeId} section em,\n#${safeId} section span {\n display: inline !important;\n}\n\n/* ── Typography Scale for 1280x720 Canvas ── */\n#${safeId} section h1 {\n font-size: 38px !important;\n font-weight: 700 !important;\n line-height: 1.25 !important;\n color: ${tokens.heading} !important;\n margin: 0 0 18px 0 !important;\n letter-spacing: -0.02em !important;\n font-family: var(--font-sans), Inter, sans-serif !important;\n}\n\n#${safeId} section h2 {\n font-size: 28px !important;\n font-weight: 600 !important;\n line-height: 1.3 !important;\n color: ${tokens.heading} !important;\n margin: 0 0 16px 0 !important;\n letter-spacing: -0.01em !important;\n font-family: var(--font-sans), Inter, sans-serif !important;\n}\n\n#${safeId} section h3 {\n font-size: 22px !important;\n font-weight: 600 !important;\n line-height: 1.4 !important;\n color: ${tokens.heading} !important;\n margin: 0 0 14px 0 !important;\n font-family: var(--font-sans), Inter, sans-serif !important;\n}\n\n#${safeId} section p,\n#${safeId} section li {\n font-size: 18px !important;\n line-height: 1.7 !important;\n color: ${tokens.text} !important;\n margin-top: 0 !important;\n margin-bottom: 12px !important;\n font-family: var(--font-sans), Inter, sans-serif !important;\n}\n\n#${safeId} section strong,\n#${safeId} section b {\n color: ${tokens.bold} !important;\n font-weight: 600 !important;\n}\n\n#${safeId} section a {\n color: ${tokens.link} !important;\n text-decoration: underline !important;\n text-decoration-thickness: 1px !important;\n text-underline-offset: 2px !important;\n}\n\n#${safeId} section a:hover {\n opacity: 0.85 !important;\n}\n\n#${safeId} section ul,\n#${safeId} section ol {\n margin: 0 0 16px 28px !important;\n padding: 0 !important;\n}\n\n#${safeId} section li {\n margin-bottom: 8px !important;\n}\n\n/* Blockquotes / Callout Cards */\n#${safeId} section blockquote {\n background: ${tokens.quoteBg} !important;\n border-left: 3px solid ${tokens.quoteBorder} !important;\n border-radius: 6px !important;\n padding: 16px 24px !important;\n margin: 16px 0 !important;\n color: ${tokens.quoteText} !important;\n}\n#${safeId} section blockquote p {\n color: ${tokens.quoteText} !important;\n font-size: 18px !important;\n margin: 0 !important;\n}\n\n/* Code Blocks & Inline Code (Monospace font standard) */\n#${safeId} section code {\n font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;\n font-style: normal !important;\n font-size: 15px !important;\n background: ${tokens.inlineCodeBg} !important;\n color: ${tokens.inlineCodeText} !important;\n padding: 2px 8px !important;\n border-radius: 6px !important;\n border: 1px solid ${tokens.codeBorder} !important;\n}\n\n#${safeId} section pre {\n background: ${tokens.codeBg} !important;\n border: 1px solid ${tokens.codeBorder} !important;\n border-radius: 8px !important;\n padding: 18px 22px !important;\n margin: 16px 0 !important;\n overflow-x: auto !important;\n}\n\n#${safeId} section pre code {\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n font-family: var(--font-mono), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace !important;\n font-style: normal !important;\n font-size: 15px !important;\n line-height: 1.6 !important;\n color: ${tokens.codeText} !important;\n}\n\n/* Tables */\ndiv#${safeId} svg foreignObject section table,\n#${safeId} section table {\n width: 100% !important;\n border-collapse: collapse !important;\n margin: 16px 0 !important;\n font-size: 17px !important;\n background-color: transparent !important;\n background: transparent !important;\n display: table !important;\n}\n\ndiv#${safeId} svg foreignObject section table tr,\n#${safeId} section table tr {\n background-color: transparent !important;\n background: transparent !important;\n border-top: 1px solid ${tokens.tableBorder} !important;\n}\n\ndiv#${safeId} svg foreignObject section table tbody tr:nth-child(2n),\n#${safeId} section table tbody tr:nth-child(2n) {\n background-color: ${tokens.tableEvenRow ?? tokens.tableHeaderBg} !important;\n}\n\ndiv#${safeId} svg foreignObject section table thead tr,\n#${safeId} section table thead tr {\n background-color: ${tokens.tableHeaderBg} !important;\n}\n\ndiv#${safeId} svg foreignObject section table th,\n#${safeId} section table th {\n background-color: ${tokens.tableHeaderBg} !important;\n color: ${tokens.heading} !important;\n font-weight: 600 !important;\n padding: 10px 16px !important;\n border: 1px solid ${tokens.tableBorder} !important;\n text-align: left !important;\n}\n\ndiv#${safeId} svg foreignObject section table td,\n#${safeId} section table td {\n padding: 10px 16px !important;\n border: 1px solid ${tokens.tableBorder} !important;\n color: ${tokens.tableText} !important;\n background-color: transparent !important;\n}\n\ndiv#${safeId} svg foreignObject section table tr:hover td,\n#${safeId} section table tr:hover td {\n background-color: ${tokens.tableRowHover} !important;\n}\n\n/* Header & Footer */\n#${safeId} section header,\n#${safeId} section footer {\n position: absolute !important;\n left: 60px !important;\n right: 60px !important;\n font-size: 14px !important;\n color: ${tokens.meta} !important;\n font-family: var(--font-sans), Inter, sans-serif !important;\n opacity: 0.8 !important;\n}\n\n#${safeId} section header {\n top: 24px !important;\n border-bottom: 1px solid ${tokens.tableBorder} !important;\n padding-bottom: 6px !important;\n}\n\n#${safeId} section footer {\n bottom: 24px !important;\n border-top: 1px solid ${tokens.tableBorder} !important;\n padding-top: 6px !important;\n}\n\n/* Multi-column Grid & Flex Layout Utilities */\n#${safeId} section .columns,\n#${safeId} section .grid-2 {\n display: grid !important;\n grid-template-columns: 1fr 1fr !important;\n gap: 28px !important;\n width: 100% !important;\n margin: 16px 0 !important;\n align-items: start !important;\n}\n\n#${safeId} section .columns > div,\n#${safeId} section .grid-2 > div {\n min-width: 0 !important;\n}\n\n#${safeId} section .card {\n background: ${tokens.quoteBg} !important;\n border: 1px solid ${tokens.cardBorder} !important;\n border-radius: 10px !important;\n padding: 18px 22px !important;\n margin: 12px 0 !important;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;\n}\n\n#${safeId} section .card.highlight {\n border-left: 4px solid ${tokens.link} !important;\n}\n\n#${safeId} section .card.warning {\n border-left: 4px solid #f59e0b !important;\n}\n\n#${safeId} section .card.success {\n border-left: 4px solid #10b981 !important;\n}\n\n/* Marp Split Layout Container */\n#${safeId} section[data-marpit-advanced-background=\"background\"] {\n display: flex !important;\n flex-direction: row !important;\n padding: 0 !important;\n}\n\n#${safeId} section[data-marpit-advanced-background=\"background\"] > .marpit-advanced-background-container {\n flex: 0 0 50% !important;\n height: 100% !important;\n position: relative !important;\n}\n\n#${safeId} section[data-marpit-advanced-background=\"background\"] > .marpit-advanced-background-container + * {\n flex: 1 !important;\n padding: 50px 60px !important;\n display: flex !important;\n flex-direction: column !important;\n justify-content: center !important;\n}\n\n/* Hide Raw Marp Image Artifacts */\n#${safeId} section img[data-marp-bg] {\n display: none !important;\n}\n`;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Theme System — Registry, resolution, and CSS generation\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { BuiltInTheme, SlideTheme, ThemeTokens } from '../types.js';\nimport { darkThemeTokens } from './dark.js';\nimport { lightThemeTokens } from './light.js';\nimport { navyThemeTokens } from './navy.js';\nimport { generateScopedCss as _generateScopedCss } from './scoped-css.js';\n\n/** Built-in theme registry */\nconst builtInThemes: Record<BuiltInTheme, ThemeTokens> = {\n dark: darkThemeTokens,\n light: lightThemeTokens,\n navy: navyThemeTokens,\n};\n\n/**\n * Get theme tokens by built-in name.\n */\nexport function getThemeTokens(theme: BuiltInTheme): ThemeTokens {\n return builtInThemes[theme];\n}\n\n/**\n * Resolve a theme (built-in name or custom SlideTheme) to a full SlideTheme object.\n */\nexport function resolveTheme(theme: BuiltInTheme | SlideTheme | undefined): SlideTheme {\n if (!theme) {\n return { name: 'dark', tokens: builtInThemes.dark };\n }\n\n if (typeof theme === 'string') {\n return { name: theme, tokens: builtInThemes[theme] };\n }\n\n return theme;\n}\n\n/**\n * Define a custom theme with full token control.\n */\nexport function defineTheme(definition: { name: string; tokens: ThemeTokens }): SlideTheme {\n return {\n name: definition.name,\n tokens: definition.tokens,\n };\n}\n\n/**\n * Generate scoped CSS for a theme.\n */\nexport function generateScopedCss(\n theme: SlideTheme,\n containerId?: string,\n): string {\n return _generateScopedCss(theme.tokens, containerId);\n}\n\n// Re-export sub-modules (token objects for advanced usage)\nexport { darkThemeTokens } from './dark.js';\nexport { lightThemeTokens } from './light.js';\nexport { navyThemeTokens } from './navy.js';\nexport { generateScopedCss as generateScopedCssFromTokens } from './scoped-css.js';\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Mermaid Plugin — Lazy-loaded diagram detection and DOM-based rendering\n// Ported from: apps/web/components/MarpSlideViewer.tsx + MermaidRenderer.tsx\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { MermaidBlock } from '../types.js';\n\n/** Singleton mermaid module promise */\nlet mermaidModulePromise: Promise<typeof import('mermaid').default> | null = null;\n/** Track if singleton init failed so we can retry */\nlet mermaidFailed = false;\n\n// ─── Detection ───────────────────────────────────────────────────────────────\n\n/**\n * Decode HTML entities in code content.\n */\nfunction decodeHtmlEntities(html: string): string {\n return html\n .replace(/&/g, '&') // MUST be first to avoid double-decode\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/ /g, ' ')\n .replace(/&#(\\d+);/g, (_, code: string) => String.fromCharCode(Number(code)))\n .replace(/&#x([0-9a-fA-F]+);/g, (_, hex: string) => String.fromCharCode(parseInt(hex, 16)));\n}\n\n/**\n * Check if raw text looks like valid mermaid diagram code.\n */\nfunction isValidMermaidCode(text: string): boolean {\n if (!text || text.length > 2500) return false;\n if (text.startsWith('---') || text.includes('marp: true')) return false;\n\n // Check for known mermaid diagram headers\n const hasHeader =\n /^(?:graph\\s+(?:TD|TB|LR|RL|BT)|flowchart\\s+(?:TD|TB|LR|RL|BT)|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|gitGraph|mindmap|quadrantChart|journey|timeline|xychart|C4Context)\\b/i.test(\n text,\n );\n\n // Must have at least one connection indicator\n const hasConnections =\n text.includes('-->') ||\n text.includes('->>') ||\n text.includes('---') ||\n text.includes('[') ||\n text.includes('(');\n\n return hasHeader && text.includes('\\n') && hasConnections;\n}\n\n/**\n * Detect mermaid blocks in rendered Marp HTML.\n * Returns array of MermaidBlock with raw and sanitized code.\n */\nexport function detectMermaidBlocks(html: string): MermaidBlock[] {\n const blocks: MermaidBlock[] = [];\n\n // Match <pre><code class=\"language-mermaid|diagram|graph\">...</code></pre>\n const regex =\n /<pre><code class=\"language-(?:mermaid|diagram|graph)\">([\\s\\S]*?)<\\/code><\\/pre>/g;\n\n let match;\n let index = 0;\n\n while ((match = regex.exec(html)) !== null) {\n const code = decodeHtmlEntities(match[1]);\n if (isValidMermaidCode(code)) {\n blocks.push({\n index: index++,\n code,\n sanitizedCode: sanitizeMermaidCode(code),\n });\n }\n }\n\n return blocks;\n}\n\n// ─── Sanitization ────────────────────────────────────────────────────────────\n\n/**\n * Sanitize mermaid code — fix common issues that cause render failures.\n * Ported from: apps/web/components/MermaidRenderer.tsx sanitizeMermaidCode()\n */\nexport function sanitizeMermaidCode(chart: string, isDark = false): string {\n let code = (chart || '').trim();\n\n // Remove markdown code fences if wrapped\n code = code.replace(/^```(?:mermaid|diagram|graph)?\\s*/i, '').replace(/```$/i, '').trim();\n\n // If missing diagram header, prepend flowchart TD\n if (\n code &&\n !/^(graph|flowchart|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|gitGraph|mindmap|journey|quadrantChart|xychart|C4Context|timeline)/i.test(\n code,\n )\n ) {\n code = `flowchart TD\\n${code}`;\n }\n\n // Fix unquoted node labels with special characters in square brackets\n code = code.replace(\n /([a-zA-Z0-9_-]+)\\[([^\\]\\n\\r\"]+)\\]/g,\n (match, id: string, label: string) => {\n const trimmed = label.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) return match;\n return `${id}[\"${trimmed.replace(/\"/g, \"'\")}\"]`;\n },\n );\n\n // Fix unquoted node labels with special characters in rounded nodes\n code = code.replace(\n /([a-zA-Z0-9_-]+)\\(([^)\\n\\r\"]+)\\)/g,\n (match, id: string, label: string) => {\n const trimmed = label.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) return match;\n return `${id}(\"${trimmed.replace(/\"/g, \"'\")}\")`;\n },\n );\n\n // Fix subgraphs with spaces in name (Mermaid v10+ requires: subgraph id [Title])\n code = code.replace(\n /^\\s*subgraph\\s+([A-Za-z0-9_ -]+)\\s*$/gm,\n (match, rawName: string) => {\n const trimmed = rawName.trim();\n if (trimmed.includes('[') || trimmed.includes(']')) return match;\n const cleanId = trimmed.replace(/[^A-Za-z0-9_]/g, '_');\n return ` subgraph ${cleanId} [\"${trimmed}\"]`;\n },\n );\n\n return code;\n}\n\n// ─── DOM Rendering ───────────────────────────────────────────────────────────\n\n/**\n * Get or create the Mermaid singleton module.\n */\nasync function getMermaid(): Promise<typeof import('mermaid').default> {\n if (mermaidFailed) {\n mermaidModulePromise = null;\n mermaidFailed = false;\n }\n\n if (!mermaidModulePromise) {\n mermaidModulePromise = import('mermaid')\n .then((mod) => mod.default)\n .catch((err) => {\n mermaidModulePromise = null;\n mermaidFailed = true;\n throw new Error(`[presentation-kit] Failed to load Mermaid: ${err}`);\n });\n }\n return mermaidModulePromise;\n}\n\n/**\n * Configuration for Mermaid initialization.\n * Matches the detailed config from MarpSlideViewer.\n */\nfunction getMermaidConfig(isDark: boolean) {\n const tokens = isDark\n ? {\n darkMode: true,\n background: '#18181b',\n primaryColor: '#27272a',\n primaryTextColor: '#f4f4f5',\n primaryBorderColor: 'rgba(255, 255, 255, 0.2)',\n lineColor: '#71717a',\n secondaryColor: '#1e1e24',\n tertiaryColor: '#121214',\n textColor: '#f4f4f5',\n mainBkg: '#1f1f23',\n nodeBorder: 'rgba(255, 255, 255, 0.22)',\n clusterBkg: 'rgba(255, 255, 255, 0.02)',\n clusterBorder: 'rgba(255, 255, 255, 0.12)',\n titleColor: '#f4f4f5',\n edgeLabelBackground: '#27272a',\n actorBorder: 'rgba(255, 255, 255, 0.2)',\n actorBkg: '#27272a',\n actorTextColor: '#f4f4f5',\n actorLineColor: '#71717a',\n signalColor: '#f4f4f5',\n signalTextColor: '#f4f4f5',\n }\n : {\n darkMode: false,\n background: '#ffffff',\n primaryColor: '#f4f4f6',\n primaryTextColor: '#18181b',\n primaryBorderColor: 'rgba(0, 0, 0, 0.15)',\n lineColor: '#94a3b8',\n secondaryColor: '#fafafa',\n tertiaryColor: '#f4f4f5',\n textColor: '#18181b',\n mainBkg: '#f8fafc',\n nodeBorder: 'rgba(0, 0, 0, 0.15)',\n clusterBkg: 'rgba(0, 0, 0, 0.015)',\n clusterBorder: 'rgba(0, 0, 0, 0.1)',\n titleColor: '#18181b',\n edgeLabelBackground: '#f1f5f9',\n actorBorder: 'rgba(0, 0, 0, 0.2)',\n actorBkg: '#f4f4f6',\n actorTextColor: '#18181b',\n actorLineColor: '#94a3b8',\n signalColor: '#18181b',\n signalTextColor: '#18181b',\n };\n\n return {\n startOnLoad: false,\n suppressErrorRendering: true,\n theme: isDark ? ('dark' as const) : ('neutral' as const),\n securityLevel: 'loose' as const,\n fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 14,\n flowchart: {\n htmlLabels: false,\n useMaxWidth: false,\n padding: 32,\n nodeSpacing: 55,\n rankSpacing: 60,\n curve: 'basis' as const,\n },\n themeCSS: `\n svg, svg *, g, text, tspan, .node, .node *, .edgeLabel, .edgeLabel *, .cluster, .cluster * {\n clip-path: none !important;\n -webkit-clip-path: none !important;\n overflow: visible !important;\n }\n .node rect, .node circle, .node ellipse, .node polygon, .node path {\n stroke-width: 1.5px !important;\n rx: 8px !important;\n ry: 8px !important;\n }\n .node text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .edgeLabel rect {\n rx: 5px !important;\n ry: 5px !important;\n fill: ${isDark ? '#27272a' : '#f1f5f9'} !important;\n stroke: ${isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.12)'} !important;\n stroke-width: 1px !important;\n }\n .edgeLabel text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n fill: ${isDark ? '#e4e4e7' : '#334155'} !important;\n text-anchor: middle !important;\n dominant-baseline: central !important;\n }\n .cluster rect {\n rx: 10px !important;\n ry: 10px !important;\n fill: ${isDark ? 'rgba(255, 255, 255, 0.02)' : 'rgba(0, 0, 0, 0.015)'} !important;\n stroke: ${isDark ? 'rgba(255, 255, 255, 0.12)' : 'rgba(0, 0, 0, 0.12)'} !important;\n stroke-width: 1.5px !important;\n }\n .cluster text {\n font-family: Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n fill: ${isDark ? '#a1a1aa' : '#64748b'} !important;\n }\n .edgePath path {\n stroke: ${isDark ? '#71717a' : '#94a3b8'} !important;\n stroke-width: 1.5px !important;\n }\n .arrowheadPath {\n fill: ${isDark ? '#71717a' : '#94a3b8'} !important;\n }\n `,\n themeVariables: tokens,\n };\n}\n\n/**\n * Render mermaid diagrams inside a container element.\n * Lazy-loads mermaid module on first call.\n *\n * This function MUST run in a browser environment (needs DOM).\n * Returns early gracefully in SSR/Node.js environments.\n */\nexport async function renderMermaidDiagrams(\n container: HTMLElement,\n theme: 'dark' | 'light' | 'navy' = 'dark',\n): Promise<void> {\n // Guard: SSR/Node.js environments have no DOM\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n console.warn('[presentation-kit] renderMermaidDiagrams skipped: no DOM available (SSR)');\n return;\n }\n\n const mermaid = await getMermaid();\n const isDark = theme === 'dark' || theme === 'navy';\n\n mermaid.initialize(getMermaidConfig(isDark));\n\n // Find mermaid code blocks in container\n const codeNodes = Array.from(\n container.querySelectorAll('pre > code, pre, .marp-mermaid-rendered'),\n );\n\n const mermaidNodes = codeNodes.filter((node) => {\n if ((node as HTMLElement).classList.contains('marp-mermaid-rendered')) return true;\n const text = node.textContent?.trim() || '';\n const className = (node as HTMLElement).className || '';\n\n // Never treat frontmatter or large blocks as mermaid\n if (text.startsWith('---') || text.includes('marp: true') || text.length > 2500) {\n return false;\n }\n\n return (\n className.includes('language-mermaid') ||\n className.includes('language-diagram') ||\n className.includes('language-graph') ||\n isValidMermaidCode(text)\n );\n });\n\n if (mermaidNodes.length === 0) return;\n\n for (let i = 0; i < mermaidNodes.length; i++) {\n const node = mermaidNodes[i] as HTMLElement;\n const isAlreadyWrapper = node.classList.contains('marp-mermaid-rendered');\n const rawChartCode = isAlreadyWrapper\n ? node.getAttribute('data-chart-code') || ''\n : node.textContent?.trim() || '';\n\n if (!rawChartCode) continue;\n\n const preEl = isAlreadyWrapper\n ? node\n : node.tagName.toLowerCase() === 'pre'\n ? node\n : node.parentElement;\n if (!preEl) continue;\n\n const sanitizedCode = sanitizeMermaidCode(rawChartCode, isDark);\n const diagId = `slide_mermaid_${Date.now()}_${i}_${Math.floor(Math.random() * 10000)}`;\n\n try {\n let { svg } = await mermaid.render(diagId, sanitizedCode);\n\n // Strip SVG clip-path attributes to eliminate clipping issues\n svg = svg\n .replace(/clip-path=\"url\\(#[^\"]+\\)\"/gi, '')\n .replace(/clip-path=\"[^\"]*\"/gi, '')\n .replace(/<clipPath[\\s\\S]*?<\\/clipPath>/gi, '');\n\n const wrapper = document.createElement('div');\n wrapper.className =\n 'marp-mermaid-rendered my-3 flex items-center justify-center p-3 rounded-xl bg-black/5 dark:bg-white/5 border border-black/10 dark:border-white/10 [&_svg]:max-w-full [&_svg]:h-auto';\n wrapper.setAttribute('data-chart-code', rawChartCode);\n wrapper.setAttribute('data-mermaid-processed', 'true');\n wrapper.innerHTML = svg;\n preEl.replaceWith(wrapper);\n } catch (renderErr) {\n console.warn('[presentation-kit] Mermaid render error:', renderErr);\n }\n }\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Shiki Plugin — Lazy singleton syntax highlighting for code blocks\n// Pattern: Ported from Slidev composables/useShiki.ts\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { Highlighter } from 'shiki';\n\n/** Singleton highlighter promise — created once, reused everywhere */\nlet highlighterPromise: Promise<Highlighter> | null = null;\n/** Track if singleton init failed so we can retry */\nlet highlighterFailed = false;\n\n/** Supported languages for syntax highlighting */\nconst SUPPORTED_LANGS = [\n 'javascript',\n 'typescript',\n 'python',\n 'cpp',\n 'c',\n 'java',\n 'html',\n 'css',\n 'json',\n 'yaml',\n 'bash',\n 'shell',\n 'sql',\n 'go',\n 'rust',\n 'swift',\n 'kotlin',\n 'ruby',\n 'php',\n 'xml',\n 'markdown',\n 'dockerfile',\n 'toml',\n 'ini',\n 'graphql',\n 'prisma',\n 'solidity',\n] as const;\n\n/**\n * Get or create the Shiki highlighter singleton.\n * First call lazy-loads the WASM module (~3MB); subsequent calls return cached instance.\n */\nexport async function getHighlighter(): Promise<Highlighter> {\n if (highlighterFailed) {\n // Reset so we can retry after a failure\n highlighterPromise = null;\n highlighterFailed = false;\n }\n\n if (!highlighterPromise) {\n highlighterPromise = import('shiki')\n .then((mod) =>\n mod.createHighlighter({\n themes: ['vitesse-dark', 'vitesse-light'],\n langs: [...SUPPORTED_LANGS],\n }),\n )\n .catch((err) => {\n // Reset singleton on failure so next call retries\n highlighterPromise = null;\n highlighterFailed = true;\n throw new Error(`[presentation-kit] Failed to load Shiki highlighter: ${err}`);\n });\n }\n return highlighterPromise;\n}\n\n/**\n * Decode HTML entities in code content (e.g. < → <, & → &)\n */\nfunction decodeHtmlEntities(html: string): string {\n return html\n .replace(/&/g, '&') // MUST be first to avoid double-decode (e.g. &lt; → < → <)\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\")\n .replace(/ /g, ' ')\n .replace(/&#(\\d+);/g, (_, code: string) => String.fromCharCode(Number(code)))\n .replace(/&#x([0-9a-fA-F]+);/g, (_, hex: string) => String.fromCharCode(parseInt(hex, 16)));\n}\n\n/**\n * Map slide theme name to Shiki theme.\n */\nfunction getShikiTheme(theme: string): string {\n if (theme === 'light') return 'vitesse-light';\n return 'vitesse-dark';\n}\n\n/**\n * Post-process rendered HTML: replace <pre><code class=\"language-xxx\"> blocks\n * with Shiki-highlighted HTML.\n *\n * This is async because Shiki WASM must be loaded on first call.\n */\nexport async function highlightCodeBlocks(\n html: string,\n theme: string = 'dark',\n): Promise<string> {\n // Quick check — if no code blocks, return early\n if (!html.includes('<pre><code')) return html;\n\n const highlighter = await getHighlighter();\n const shikiTheme = getShikiTheme(theme);\n\n // Replace <pre><code class=\"language-xxx\">...</code></pre>\n return html.replace(\n /<pre><code class=\"language-(\\w+)\">([\\s\\S]*?)<\\/code><\\/pre>/g,\n (_, lang: string, code: string) => {\n const decoded = decodeHtmlEntities(code);\n try {\n return highlighter.codeToHtml(decoded, { lang, theme: shikiTheme });\n } catch {\n // If language not supported, return original\n return `<pre><code class=\"language-${lang}\">${code}</code></pre>`;\n }\n },\n );\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Click Preprocessor — Convert <!-- click --> / <!-- clicks --> to wrapped divs\n// Runs BEFORE Marp renders. Wraps content INSIDE divs for robust HTML structure.\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport interface ClickPreprocessResult {\n /** Processed markdown with HTML click markers */\n markdown: string;\n /** Total number of click groups assigned */\n totalClicks: number;\n}\n\n/**\n * Preprocess markdown to convert click directives to HTML wrappers.\n *\n * Syntax:\n * - `<!-- click -->` → Block-level: wraps next block in data-click-group=\"N\"\n * - `<!-- clicks -->` → Item-level: marks list for auto-expansion in postprocessor\n *\n * Auto-assigns sequential indices (1, 2, 3, ...) based on order of appearance.\n *\n * IMPORTANT: Skips code fences (``` ... ```) to avoid converting directives\n * inside code blocks.\n *\n * Strategy: Each `<!-- click -->` opens a `<div data-click-group=\"N\">` that wraps\n * all content until the next `<!-- click -->` / `<!-- clicks -->` or end of slide.\n * The postprocessor only needs to handle `<!-- clicks -->` (list expansion).\n */\nexport function preprocessClicks(markdown: string): ClickPreprocessResult {\n if (!markdown || !markdown.trim()) {\n return { markdown, totalClicks: 0 };\n }\n\n // Split markdown into segments: code fences vs normal content\n // Code fences are preserved untouched\n const segments = splitByCodeFences(markdown);\n\n let clickIndex = 0;\n let totalClicks = 0;\n let inClickBlock = false;\n\n const processed = segments\n .map((segment) => {\n // Code fences — pass through untouched\n if (segment.isCodeFence) {\n return segment.content;\n }\n\n // Normal content — process click directives\n let content = segment.content;\n\n // Replace <!-- click --> and <!-- clicks --> with HTML markers\n content = content.replace(\n /^<!--\\s*(click|clicks)\\s*-->$/gm,\n (match, type: string) => {\n clickIndex++;\n\n // Close previous click block if open\n const closePrev = inClickBlock ? '</div>\\n' : '';\n inClickBlock = true;\n\n if (type === 'clicks') {\n totalClicks++;\n // clicks marker — will be expanded in postprocessor\n return `${closePrev}<div data-clicks=\"${clickIndex}\">`;\n } else {\n totalClicks++;\n // click marker — wraps everything until next marker\n return `${closePrev}<div data-click-group=\"${clickIndex}\">`;\n }\n },\n );\n\n return content;\n })\n .join('');\n\n // Close the last click block if open\n const result = inClickBlock ? processed + '</div>' : processed;\n\n return { markdown: result, totalClicks };\n}\n\n/** Represents a segment of markdown (either code fence or normal content) */\ninterface Segment {\n content: string;\n isCodeFence: boolean;\n}\n\n/**\n * Split markdown into code fence and non-code-fence segments.\n * Code fences (``` ... ```) are preserved untouched.\n */\nfunction splitByCodeFences(markdown: string): Segment[] {\n const segments: Segment[] = [];\n const regex = /^(```[\\s\\S]*?^```)/gm;\n\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(markdown)) !== null) {\n // Add non-code content before this fence\n if (match.index > lastIndex) {\n segments.push({\n content: markdown.slice(lastIndex, match.index),\n isCodeFence: false,\n });\n }\n // Add the code fence itself\n segments.push({\n content: match[0],\n isCodeFence: true,\n });\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining content\n if (lastIndex < markdown.length) {\n segments.push({\n content: markdown.slice(lastIndex),\n isCodeFence: false,\n });\n }\n\n return segments;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Click Postprocessor — Expand <!-- clicks --> list items after Marp render\n//\n// The preprocessor already handles <!-- click --> wrapping (block-level).\n// This postprocessor only handles <!-- clicks --> (item-level list expansion).\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport interface ClickPostprocessResult {\n /** HTML with click groups applied */\n html: string;\n /** Total number of individual click groups (after expanding clicks) */\n totalClicks: number;\n}\n\n/**\n * Post-process rendered Marp HTML to expand clicks (item-level) list items.\n *\n * The preprocessor wraps <!-- click --> blocks in <div data-click-group=\"N\">.\n * This postprocessor handles <!-- clicks --> by splitting list items into\n * individual click groups.\n *\n * Pattern: <div data-clicks=\"N\">...<ul><li>...</li></ul>...</div>\n * Becomes: multiple <div data-click-group=\"N\">...<ul><li>...</li></ul>...</div>\n *\n * @param html - Raw Marp-rendered HTML (with click-group and clicks markers)\n * @returns HTML with all click groups expanded\n */\nexport function postprocessClicks(html: string): ClickPostprocessResult {\n if (!html || !html.includes('data-clicks')) {\n // No clicks markers — count existing click-groups\n const totalClicks = extractMaxClicks(html);\n return { html, totalClicks };\n }\n\n let result = html;\n let totalClicks = 0;\n\n // Handle <!-- clicks --> markers: expand list items into individual click groups\n // Pattern: <div data-clicks=\"N\">...(content with <ul>/<ol>)...</div>\n result = result.replace(\n /<div data-clicks=\"(\\d+)\">([\\s\\S]*?)<\\/div>/g,\n (_, startIdx: string, innerContent: string) => {\n const start = parseInt(startIdx, 10);\n\n // Check if inner content contains a list\n const listMatch = innerContent.match(/((?:<[^>]+>)*?<(?:ul|ol)[^>]*>[\\s\\S]*?<\\/(?:ul|ol)>)/);\n\n if (!listMatch) {\n // No list found — treat as single click group\n totalClicks++;\n return `<div data-click-group=\"${start}\">${innerContent}</div>`;\n }\n\n // Extract list items\n const listBlock = listMatch[0];\n const liRegex = /<li[^>]*>[\\s\\S]*?<\\/li>/g;\n const items: string[] = [];\n let liMatch;\n while ((liMatch = liRegex.exec(listBlock)) !== null) {\n items.push(liMatch[0]);\n }\n\n if (items.length === 0) {\n totalClicks++;\n return `<div data-click-group=\"${start}\">${innerContent}</div>`;\n }\n\n // Get list wrapper tags\n const listOpenTag = listBlock.match(/<(ul|ol)[^>]*>/)?.[0] ?? '<ul>';\n const listCloseTag = listBlock.match(/<\\/(ul|ol)>$/)?.[0] ?? '</ul>';\n\n // Wrap each item in its own click group\n let clickIdx = start;\n const wrappedItems = items.map((item) => {\n const idx = clickIdx++;\n totalClicks++;\n return `<div data-click-group=\"${idx}\">${listOpenTag}${item}${listCloseTag}</div>`;\n });\n\n return wrappedItems.join('\\n');\n },\n );\n\n // Also count any click-groups that were already in the HTML (from <!-- click -->)\n const existingGroups = extractMaxClicks(result);\n if (existingGroups > totalClicks) {\n totalClicks = existingGroups;\n }\n\n return { html: result, totalClicks };\n}\n\n/**\n * Extract max click index from rendered HTML.\n * Scans for all data-click-group=\"N\" attributes and returns the max N.\n */\nexport function extractMaxClicks(html: string): number {\n const matches = html.match(/data-click-group=\"(\\d+)\"/g);\n if (!matches) return 0;\n\n let max = 0;\n for (const match of matches) {\n const num = parseInt(match.match(/data-click-group=\"(\\d+)\"/)?.[1] ?? '0', 10);\n if (num > max) max = num;\n }\n return max;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Click CSS — Scoped CSS for click-to-reveal animations\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport interface ClickCssOptions {\n /** Container ID to scope CSS (default: no scope, global) */\n containerId?: string;\n /** Animation duration in ms (default: 300) */\n duration?: number;\n /** Animation easing (default: 'ease') */\n easing?: string;\n /** Y offset for slide-up animation in px (default: 8) */\n offsetY?: number;\n /** Use slide-up animation (default: true) */\n slideUp?: boolean;\n /** Use fade animation (default: true) */\n fade?: boolean;\n}\n\n/**\n * Generate CSS for click-to-reveal system.\n *\n * Elements with `data-click-group=\"N\"` are hidden by default.\n * Adding class `visible` reveals them with animation.\n *\n * @param options - Animation options\n * @returns CSS string to inject via <style>\n */\nexport function generateClickCss(options?: ClickCssOptions): string {\n const {\n containerId,\n duration = 300,\n easing = 'ease',\n offsetY = 8,\n slideUp = true,\n fade = true,\n } = options ?? {};\n\n const prefix = containerId ? `#${containerId} ` : '';\n\n const opacityFrom = fade ? '0' : '1';\n const transformFrom = slideUp ? `translateY(${offsetY}px)` : 'none';\n const opacityTo = '1';\n const transformTo = 'translateY(0)';\n\n return `\n/* ── Click-to-Reveal System ── */\n${prefix}[data-click-group] {\n opacity: ${opacityFrom};\n ${slideUp ? `transform: ${transformFrom};` : ''}\n transition: opacity ${duration}ms ${easing}, transform ${duration}ms ${easing};\n pointer-events: none;\n}\n\n${prefix}[data-click-group].visible {\n opacity: ${opacityTo};\n ${slideUp ? `transform: ${transformTo};` : ''}\n pointer-events: auto;\n}\n\n`;\n}\n","import yaml from 'js-yaml';\nimport type { LayoutBoxConfig, SlideLayoutData } from '../../types.js';\n\n/**\n * Check if a comment string represents a layout definition\n */\nexport function isLayoutComment(comment: string): boolean {\n const trimmed = comment.trim();\n return trimmed.startsWith('layout:') || trimmed.startsWith('layout :');\n}\n\n/**\n * Parse YAML layout data from a comment string\n */\nexport function parseLayoutFromComment(comment: string): SlideLayoutData | null {\n try {\n const trimmed = comment.trim();\n if (!isLayoutComment(trimmed)) return null;\n\n const parsed = yaml.load(trimmed) as { layout?: { boxes?: LayoutBoxConfig[] }; boxes?: LayoutBoxConfig[] } | null;\n if (!parsed || typeof parsed !== 'object') return null;\n\n const boxes = parsed.boxes ?? parsed.layout?.boxes;\n if (Array.isArray(boxes)) {\n return { boxes };\n }\n return null;\n } catch (err) {\n console.warn('[presentation-kit] Failed to parse layout comment YAML:', err);\n return null;\n }\n}\n\n/**\n * Filter presenter notes from a slide's comment list,\n * excluding layout blocks and Marp system directives.\n */\nexport function filterPresenterNotes(comments: string[]): string[] {\n return comments\n .map(c => c.trim())\n .filter(c => {\n if (!c) return false;\n // Skip layout definitions\n if (isLayoutComment(c)) return false;\n // Skip Marp directives like <!-- _backgroundColor: ... --> or <!-- paginate: true -->\n if (/^_?[a-zA-Z0-9_-]+\\s*:/i.test(c) && !c.toLowerCase().startsWith('note:')) {\n return false;\n }\n return true;\n })\n .map(c => {\n // If starts with \"note:\" or \"_note:\", strip the prefix\n return c.replace(/^_?note:\\s*/i, '').trim();\n });\n}\n\n/**\n * Extract per-slide layout data and presenter notes from Marp's comments array.\n */\nexport function extractLayoutsAndNotes(rawComments: (string[] | undefined)[]): {\n layouts: (SlideLayoutData | null)[];\n notes: string[][];\n} {\n const layouts: (SlideLayoutData | null)[] = [];\n const notes: string[][] = [];\n\n for (const slideComments of rawComments) {\n if (!slideComments || slideComments.length === 0) {\n layouts.push(null);\n notes.push([]);\n continue;\n }\n\n let slideLayout: SlideLayoutData | null = null;\n\n for (const comment of slideComments) {\n if (isLayoutComment(comment)) {\n const parsed = parseLayoutFromComment(comment);\n if (parsed) {\n slideLayout = parsed;\n }\n }\n }\n\n layouts.push(slideLayout);\n notes.push(filterPresenterNotes(slideComments));\n }\n\n return { layouts, notes };\n}\n","import type { SlideLayoutData } from '../../types.js';\n\n/**\n * Generate scoped CSS for per-slide layout overrides.\n *\n * Targets each slide's section within Marp's 1280x720 SVG coordinate space.\n */\nexport function generateLayoutCss(\n layouts: (SlideLayoutData | null)[],\n containerId: string = 'marp-container'\n): string {\n const cssRules: string[] = [];\n\n layouts.forEach((layout, index) => {\n if (!layout || !layout.boxes || layout.boxes.length === 0) return;\n\n const slideNum = index + 1;\n const slideSectionSelector = `#${containerId} svg[data-marpit-svg]:nth-of-type(${slideNum}) section, #${containerId} .marpit > svg:nth-of-type(${slideNum}) section`;\n\n // Make section position: relative so absolute boxes position correctly within 1280x720 canvas\n cssRules.push(`\n/* Slide ${slideNum} Layout Container */\n${slideSectionSelector} {\n position: relative !important;\n display: block !important;\n}`);\n\n for (const box of layout.boxes) {\n if (!box || !Array.isArray(box.pos) || box.pos.length < 4) continue;\n\n const [x, y, w, h] = box.pos;\n // Target selector inside the slide\n const targetSelector = box.target || `[data-box-id=\"${box.id}\"]`;\n const ruleSelector = `${slideSectionSelector} ${targetSelector}`;\n\n const styles: string[] = [\n `position: absolute !important`,\n `left: ${Math.round(x)}px !important`,\n `top: ${Math.round(y)}px !important`,\n `width: ${Math.round(w)}px !important`,\n `min-height: ${Math.round(h)}px !important`,\n `box-sizing: border-box !important`,\n `margin: 0 !important`,\n ];\n\n if (box.fontSize) {\n styles.push(`font-size: ${box.fontSize} !important`);\n }\n if (box.color) {\n styles.push(`color: ${box.color} !important`);\n }\n if (box.textAlign) {\n styles.push(`text-align: ${box.textAlign} !important`);\n }\n if (box.style) {\n styles.push(box.style);\n }\n\n cssRules.push(`\n${ruleSelector} {\n ${styles.join(';\\n ')};\n}`);\n }\n });\n\n return cssRules.join('\\n');\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// Core Render — Client-side Marp rendering\n// Replaces: apps/web/app/api/render-marp (server-side HTTP roundtrip)\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport { Marp } from '@marp-team/marp-core';\nimport type { SlideRenderResult, SlideRenderAsyncResult, SlideRenderOptions, MermaidBlock } from '../types.js';\nimport { convertTextArrows } from './arrow-converter.js';\nimport { extractMarpSource } from './source-extractor.js';\nimport { resolveTheme, generateScopedCss } from '../themes/index.js';\nimport { detectMermaidBlocks } from '../plugins/mermaid.js';\nimport { highlightCodeBlocks } from '../plugins/shiki.js';\nimport { preprocessClicks } from '../vclick/preprocessor.js';\nimport { postprocessClicks } from '../vclick/postprocessor.js';\nimport { generateClickCss } from '../vclick/click-css.js';\nimport { extractLayoutsAndNotes, generateLayoutCss } from './layout/index.js';\n\ninterface RenderMarpResult {\n html: string;\n css: string;\n comments: (string[] | undefined)[];\n maxClicks: number;\n}\n\n/**\n * Low-level synchronous Marp render.\n * Preprocesses clicks, converts arrows, renders Marp, postprocesses clicks.\n */\nexport function renderMarp(\n markdown: string,\n containerId: string = 'marp-container',\n enableClicks: boolean = false,\n): RenderMarpResult {\n const cleanSource = extractMarpSource(markdown);\n \n const { markdown: clickProcessed, totalClicks } = enableClicks\n ? preprocessClicks(cleanSource)\n : { markdown: cleanSource, totalClicks: 0 };\n \n const arrowsConverted = convertTextArrows(clickProcessed);\n\n const marp = new Marp({\n container: { tag: 'div', id: containerId },\n html: true,\n emoji: { unicode: true },\n });\n\n const { html, css, comments } = marp.render(arrowsConverted);\n\n // Postprocess click groups if clicks were preprocessed\n if (enableClicks && totalClicks > 0) {\n const { html: processedHtml, totalClicks: finalClicks } = postprocessClicks(html);\n return { html: processedHtml, css, comments: (comments ?? []) as (string[] | undefined)[], maxClicks: finalClicks };\n }\n\n return { html, css, comments: (comments ?? []) as (string[] | undefined)[], maxClicks: 0 };\n}\n\n/**\n * Count slides in rendered Marp HTML by detecting <svg data-marpit-svg> elements.\n */\nexport function countSlides(html: string): number {\n const matches = html.match(/<svg[^>]*data-marpit-svg/g);\n return matches ? matches.length : 1;\n}\n\n/**\n * High-level synchronous render — resolves theme, generates scoped CSS,\n * detects mermaid blocks. Does NOT apply Shiki or Mermaid rendering.\n */\nexport function renderSlide(\n markdown: string,\n options?: SlideRenderOptions,\n): SlideRenderResult {\n const containerId = options?.containerId ?? 'marp-container';\n const theme = resolveTheme(options?.theme ?? 'dark');\n const enableClicks = options?.enableClicks ?? false;\n\n const { html, css, comments, maxClicks } = renderMarp(markdown, containerId, enableClicks);\n const themeCss = generateScopedCss(theme, containerId);\n const slideCount = countSlides(html);\n const mermaidBlocks = options?.enableMermaid !== false\n ? detectMermaidBlocks(html)\n : [];\n const clickCss = enableClicks\n ? generateClickCss({ containerId })\n : '';\n\n const { layouts, notes } = extractLayoutsAndNotes(comments);\n const layoutCss = generateLayoutCss(layouts, containerId);\n\n return {\n html,\n css,\n themeCss,\n layoutCss,\n slideCount,\n mermaidBlocks,\n clickCss,\n maxClicks,\n notes,\n layouts,\n };\n}\n\n/**\n * High-level async render — applies Shiki syntax highlighting.\n * Mermaid blocks are returned separately (DOM-based, consumer renders them).\n */\nexport async function renderSlideAsync(\n markdown: string,\n options?: SlideRenderOptions,\n): Promise<SlideRenderAsyncResult> {\n const containerId = options?.containerId ?? 'marp-container';\n const theme = resolveTheme(options?.theme ?? 'dark');\n const enableClicks = options?.enableClicks ?? false;\n\n const { html, css, comments, maxClicks } = renderMarp(markdown, containerId, enableClicks);\n const themeCss = generateScopedCss(theme, containerId);\n const slideCount = countSlides(html);\n const mermaidBlocks = options?.enableMermaid !== false\n ? detectMermaidBlocks(html)\n : [];\n const clickCss = enableClicks\n ? generateClickCss({ containerId })\n : '';\n\n const { layouts, notes } = extractLayoutsAndNotes(comments);\n const layoutCss = generateLayoutCss(layouts, containerId);\n\n // Apply Shiki syntax highlighting\n const enableShiki = options?.enableShiki ?? true;\n const processedHtml = enableShiki\n ? await highlightCodeBlocks(html, theme.name)\n : html;\n\n return {\n html,\n css,\n themeCss,\n layoutCss,\n processedHtml,\n slideCount,\n mermaidBlocks,\n clickCss,\n maxClicks,\n notes,\n layouts,\n };\n}\n"]}
|