@thanh01.pmt/presentation-kit 0.2.2 → 0.2.4
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 +66 -64
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.js +60 -58
- package/dist/ai/index.js.map +1 -1
- package/dist/{chunk-HBMXEPZJ.js → chunk-3IKL6SBP.js} +110 -109
- package/dist/chunk-3IKL6SBP.js.map +1 -0
- package/dist/{chunk-OEAOYF7C.cjs → chunk-O5MCKVEA.cjs} +110 -109
- package/dist/chunk-O5MCKVEA.cjs.map +1 -0
- package/dist/index.cjs +8 -8
- package/dist/index.js +2 -2
- package/dist/react/index.cjs +165 -300
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +3 -1
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.js +163 -298
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-HBMXEPZJ.js.map +0 -1
- package/dist/chunk-OEAOYF7C.cjs.map +0 -1
|
@@ -110,9 +110,9 @@ ${joinedSlides}`;
|
|
|
110
110
|
var SLIDE_LAYOUT_PRESETS = [
|
|
111
111
|
{
|
|
112
112
|
id: "title-hero",
|
|
113
|
-
name: "
|
|
113
|
+
name: "Title & Speaker Cover",
|
|
114
114
|
category: "cover",
|
|
115
|
-
description: "
|
|
115
|
+
description: "High-impact opening slide with large title, subtitle, and speaker credentials.",
|
|
116
116
|
layout: {
|
|
117
117
|
boxes: [
|
|
118
118
|
{
|
|
@@ -157,22 +157,22 @@ var SLIDE_LAYOUT_PRESETS = [
|
|
|
157
157
|
textAlign: center
|
|
158
158
|
-->
|
|
159
159
|
|
|
160
|
-
# \u{1F680}
|
|
161
|
-
###
|
|
160
|
+
# \u{1F680} Engineering Scalable Cloud Systems
|
|
161
|
+
### Principles, Bottlenecks, and Real-World Architecture Patterns
|
|
162
162
|
|
|
163
|
-
**
|
|
163
|
+
**Presenter:** Senior Systems Architect | **Duration:** 45 mins | **Level:** Intermediate
|
|
164
164
|
|
|
165
165
|
<!--
|
|
166
166
|
Presenter Notes:
|
|
167
|
-
-
|
|
168
|
-
-
|
|
167
|
+
- Welcome the audience and outline today's primary engineering goals.
|
|
168
|
+
- Spark curiosity with an opening hook about scaling under high concurrency.
|
|
169
169
|
-->`
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
id: "two-column-split",
|
|
173
|
-
name: "
|
|
173
|
+
name: "Two-Column Comparison",
|
|
174
174
|
category: "split",
|
|
175
|
-
description: "
|
|
175
|
+
description: "Balanced side-by-side comparison for legacy vs modern patterns or pros vs cons.",
|
|
176
176
|
layout: {
|
|
177
177
|
boxes: [
|
|
178
178
|
{
|
|
@@ -207,38 +207,38 @@ Presenter Notes:
|
|
|
207
207
|
pos: [670, 150, 530, 510]
|
|
208
208
|
-->
|
|
209
209
|
|
|
210
|
-
## \u2696\uFE0F
|
|
210
|
+
## \u2696\uFE0F Monolithic Polling vs Event-Driven Architecture
|
|
211
211
|
|
|
212
212
|
<div class="columns-2">
|
|
213
213
|
<div>
|
|
214
214
|
|
|
215
|
-
### \u{1F534}
|
|
216
|
-
-
|
|
217
|
-
-
|
|
218
|
-
-
|
|
215
|
+
### \u{1F534} Legacy Polling
|
|
216
|
+
- Heavy database CPU overhead on idle cycles
|
|
217
|
+
- High network latency between updates
|
|
218
|
+
- Prone to cascading timeouts during spikes
|
|
219
219
|
|
|
220
220
|
</div>
|
|
221
221
|
<div>
|
|
222
222
|
|
|
223
|
-
### \u{1F7E2}
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
223
|
+
### \u{1F7E2} Event-Driven Streams
|
|
224
|
+
- Real-time event propagation via webhooks
|
|
225
|
+
- Zero idle compute waste with serverless consumers
|
|
226
|
+
- Automatic backpressure and queue isolation
|
|
227
227
|
|
|
228
228
|
</div>
|
|
229
229
|
</div>
|
|
230
230
|
|
|
231
231
|
<!--
|
|
232
232
|
Presenter Notes:
|
|
233
|
-
-
|
|
234
|
-
-
|
|
233
|
+
- Emphasize the core failure mode of periodic polling under sudden load spikes.
|
|
234
|
+
- Ask the room if anyone has experienced database lockups caused by polling loops.
|
|
235
235
|
-->`
|
|
236
236
|
},
|
|
237
237
|
{
|
|
238
238
|
id: "code-explainer",
|
|
239
|
-
name: "
|
|
239
|
+
name: "Code Walkthrough & Analysis",
|
|
240
240
|
category: "code",
|
|
241
|
-
description: "
|
|
241
|
+
description: "Syntax-highlighted code block on the left with step-by-step key annotations on the right.",
|
|
242
242
|
layout: {
|
|
243
243
|
boxes: [
|
|
244
244
|
{
|
|
@@ -273,16 +273,16 @@ Presenter Notes:
|
|
|
273
273
|
pos: [740, 135, 460, 535]
|
|
274
274
|
-->
|
|
275
275
|
|
|
276
|
-
## \u{1F4BB}
|
|
276
|
+
## \u{1F4BB} Robust Async Transaction Pipeline
|
|
277
277
|
|
|
278
278
|
<div class="columns-2">
|
|
279
279
|
<div>
|
|
280
280
|
|
|
281
281
|
\`\`\`ts
|
|
282
|
-
//
|
|
282
|
+
// Process payment with idempotency guarantee
|
|
283
283
|
export async function processPayment(order: Order) {
|
|
284
284
|
const isValid = await validateOrder(order);
|
|
285
|
-
if (!isValid) throw new Error("
|
|
285
|
+
if (!isValid) throw new Error("ValidationFailed");
|
|
286
286
|
|
|
287
287
|
const receipt = await chargeCard(order);
|
|
288
288
|
return sendConfirmation(receipt);
|
|
@@ -292,25 +292,26 @@ export async function processPayment(order: Order) {
|
|
|
292
292
|
</div>
|
|
293
293
|
<div>
|
|
294
294
|
|
|
295
|
-
### \u{1F50D}
|
|
296
|
-
1. **
|
|
297
|
-
2. **
|
|
298
|
-
3. **
|
|
295
|
+
### \u{1F50D} Key Engineering Invariants:
|
|
296
|
+
1. **Early Guard Clause:** Validates payload immediately at line 3 before triggering external calls.
|
|
297
|
+
2. **Deterministic Sequence:** Enforces strict order of operations using native \`await\`.
|
|
298
|
+
3. **Audit Trail:** Returns immutable payment receipt upon successful execution.
|
|
299
299
|
|
|
300
300
|
</div>
|
|
301
301
|
</div>
|
|
302
302
|
|
|
303
303
|
<!--
|
|
304
304
|
Presenter Notes:
|
|
305
|
-
-
|
|
306
|
-
-
|
|
305
|
+
- Walk through lines 1 to 7 sequentially.
|
|
306
|
+
- Cold-call check: "What happens if line 6 throws a network timeout?"
|
|
307
|
+
- Cognitive scaffolding: Highlight the importance of idempotency keys in payment APIs.
|
|
307
308
|
-->`
|
|
308
309
|
},
|
|
309
310
|
{
|
|
310
311
|
id: "metrics-3-card",
|
|
311
|
-
name: "
|
|
312
|
+
name: "3-Metric Key Results Grid",
|
|
312
313
|
category: "metrics",
|
|
313
|
-
description: "
|
|
314
|
+
description: "Three high-visibility KPI stat cards for benchmarks, impact, and success criteria.",
|
|
314
315
|
layout: {
|
|
315
316
|
boxes: [
|
|
316
317
|
{
|
|
@@ -355,43 +356,43 @@ Presenter Notes:
|
|
|
355
356
|
pos: [860, 165, 340, 485]
|
|
356
357
|
-->
|
|
357
358
|
|
|
358
|
-
## \u{1F4CA}
|
|
359
|
+
## \u{1F4CA} Performance & Reliability Benchmarks
|
|
359
360
|
|
|
360
361
|
<div class="columns-3">
|
|
361
362
|
<div>
|
|
362
363
|
|
|
363
|
-
# \u26A1 99.
|
|
364
|
-
###
|
|
365
|
-
|
|
364
|
+
# \u26A1 99.99%
|
|
365
|
+
### SLA Availability
|
|
366
|
+
High-availability multi-region cluster with automated failover routing.
|
|
366
367
|
|
|
367
368
|
</div>
|
|
368
369
|
<div>
|
|
369
370
|
|
|
370
|
-
# \u{1F680}
|
|
371
|
-
###
|
|
372
|
-
|
|
371
|
+
# \u{1F680} 15ms
|
|
372
|
+
### P99 Latency
|
|
373
|
+
Sub-20ms roundtrip response time via distributed edge caching.
|
|
373
374
|
|
|
374
375
|
</div>
|
|
375
376
|
<div>
|
|
376
377
|
|
|
377
|
-
# \u{1F6E1}\uFE0F
|
|
378
|
-
###
|
|
379
|
-
|
|
378
|
+
# \u{1F6E1}\uFE0F Zero
|
|
379
|
+
### Unhandled Breaches
|
|
380
|
+
Full SOC2 Type II compliance and end-to-end payload encryption.
|
|
380
381
|
|
|
381
382
|
</div>
|
|
382
383
|
</div>
|
|
383
384
|
|
|
384
385
|
<!--
|
|
385
386
|
Presenter Notes:
|
|
386
|
-
-
|
|
387
|
-
-
|
|
387
|
+
- Highlight the 15ms P99 latency target as the primary technical milestone.
|
|
388
|
+
- Connect these metrics directly to the architecture decisions discussed next.
|
|
388
389
|
-->`
|
|
389
390
|
},
|
|
390
391
|
{
|
|
391
392
|
id: "process-flow",
|
|
392
|
-
name: "
|
|
393
|
+
name: "Architecture & Process Flow",
|
|
393
394
|
category: "diagram",
|
|
394
|
-
description: "
|
|
395
|
+
description: "Multi-stage workflow with responsive Mermaid diagram and phase summaries.",
|
|
395
396
|
layout: {
|
|
396
397
|
boxes: [
|
|
397
398
|
{
|
|
@@ -426,33 +427,33 @@ Presenter Notes:
|
|
|
426
427
|
pos: [80, 465, 1120, 205]
|
|
427
428
|
-->
|
|
428
429
|
|
|
429
|
-
## \u{1F504}
|
|
430
|
+
## \u{1F504} End-to-End Data Ingestion Pipeline
|
|
430
431
|
|
|
431
432
|
\`\`\`mermaid
|
|
432
433
|
graph LR
|
|
433
|
-
A[1. Client
|
|
434
|
-
B --> C[3. Auth
|
|
435
|
-
C --> D[4.
|
|
434
|
+
A[1. Client Ingress] --> B[2. API Gateway]
|
|
435
|
+
B --> C[3. Auth Verifier]
|
|
436
|
+
C --> D[4. Distributed DB]
|
|
436
437
|
style A fill:#0284c7,stroke:#38bdf8,stroke-width:2px,color:#fff
|
|
437
438
|
style B fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#fff
|
|
438
439
|
style C fill:#059669,stroke:#34d399,stroke-width:2px,color:#fff
|
|
439
440
|
style D fill:#7c3aed,stroke:#a78bfa,stroke-width:2px,color:#fff
|
|
440
441
|
\`\`\`
|
|
441
442
|
|
|
442
|
-
- **
|
|
443
|
-
- **
|
|
443
|
+
- **Ingress & Gateway:** Rate-limits traffic and applies reverse-proxy load balancing.
|
|
444
|
+
- **Verification & Storage:** Decodes cryptographic JWT tokens before transactional write commit.
|
|
444
445
|
|
|
445
446
|
<!--
|
|
446
447
|
Presenter Notes:
|
|
447
|
-
-
|
|
448
|
-
-
|
|
448
|
+
- Trace each hop across the diagram from left to right.
|
|
449
|
+
- Ask: "Where should rate limiting be applied to prevent DDoS attacks?"
|
|
449
450
|
-->`
|
|
450
451
|
},
|
|
451
452
|
{
|
|
452
453
|
id: "quote-highlight",
|
|
453
|
-
name: "
|
|
454
|
+
name: "Core Principle & Quote Highlight",
|
|
454
455
|
category: "quote",
|
|
455
|
-
description: "
|
|
456
|
+
description: "Prominent quote callout for fundamental engineering rules or memorable mantras.",
|
|
456
457
|
layout: {
|
|
457
458
|
boxes: [
|
|
458
459
|
{
|
|
@@ -483,23 +484,23 @@ Presenter Notes:
|
|
|
483
484
|
fontSize: 1.4rem
|
|
484
485
|
-->
|
|
485
486
|
|
|
486
|
-
## \u{1F4A1}
|
|
487
|
+
## \u{1F4A1} Foundational Architecture Principle
|
|
487
488
|
|
|
488
|
-
> "
|
|
489
|
+
> "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."
|
|
489
490
|
>
|
|
490
491
|
> \u2014 **Edsger W. Dijkstra**
|
|
491
492
|
|
|
492
493
|
<!--
|
|
493
494
|
Presenter Notes:
|
|
494
|
-
-
|
|
495
|
-
-
|
|
495
|
+
- Pause for 5 seconds of silence to let the quote sink in.
|
|
496
|
+
- Ask: "How do our current architectural choices reflect this principle?"
|
|
496
497
|
-->`
|
|
497
498
|
},
|
|
498
499
|
{
|
|
499
500
|
id: "quiz-checkpoint",
|
|
500
|
-
name: "
|
|
501
|
+
name: "Interactive Formative Checkpoint",
|
|
501
502
|
category: "assessment",
|
|
502
|
-
description: "
|
|
503
|
+
description: "Interactive multiple-choice diagnostic checkpoint with A/B/C/D voting options.",
|
|
503
504
|
layout: {
|
|
504
505
|
boxes: [
|
|
505
506
|
{
|
|
@@ -538,27 +539,27 @@ Presenter Notes:
|
|
|
538
539
|
fontSize: 1.15rem
|
|
539
540
|
-->
|
|
540
541
|
|
|
541
|
-
## \u{1F3AF}
|
|
542
|
+
## \u{1F3AF} Formative Checkpoint: Verify Your Understanding
|
|
542
543
|
|
|
543
|
-
> **
|
|
544
|
+
> **Question:** In an event-driven architecture, which pattern guarantees that messages are never permanently lost if a downstream consumer crashes?
|
|
544
545
|
|
|
545
|
-
- **A.**
|
|
546
|
-
- **B.**
|
|
547
|
-
- **C.**
|
|
548
|
-
- **D.**
|
|
546
|
+
- **A.** Direct HTTP POST call with a short 2-second timeout
|
|
547
|
+
- **B.** Persistent Message Broker with Dead-Letter Queue (DLQ) & retry policy
|
|
548
|
+
- **C.** In-memory client RAM cache without disk persistence
|
|
549
|
+
- **D.** Discarding failed packets and prompting the user to re-submit
|
|
549
550
|
|
|
550
551
|
<!--
|
|
551
552
|
Presenter Notes:
|
|
552
|
-
-
|
|
553
|
-
-
|
|
554
|
-
-
|
|
553
|
+
- Give students 30 seconds to vote on option A, B, C, or D.
|
|
554
|
+
- Correct answer: B.
|
|
555
|
+
- Explain why options A and C introduce catastrophic data loss in production.
|
|
555
556
|
-->`
|
|
556
557
|
},
|
|
557
558
|
{
|
|
558
559
|
id: "tiered-practice-3cards",
|
|
559
|
-
name: "
|
|
560
|
+
name: "Tiered Differentiation (Bronze / Silver / Gold)",
|
|
560
561
|
category: "content",
|
|
561
|
-
description: "
|
|
562
|
+
description: "Three progressive competency tiers allowing self-paced learning acceleration.",
|
|
562
563
|
layout: {
|
|
563
564
|
boxes: [
|
|
564
565
|
{
|
|
@@ -601,46 +602,46 @@ Presenter Notes:
|
|
|
601
602
|
pos: [850, 140, 350, 520]
|
|
602
603
|
-->
|
|
603
604
|
|
|
604
|
-
## \u{1F6E0}\uFE0F
|
|
605
|
+
## \u{1F6E0}\uFE0F Hands-On Challenge: 3-Tier Differentiation
|
|
605
606
|
|
|
606
607
|
<div class="columns-3">
|
|
607
608
|
<div>
|
|
608
609
|
|
|
609
|
-
### \u{1F949}
|
|
610
|
-
-
|
|
611
|
-
-
|
|
612
|
-
- *
|
|
610
|
+
### \u{1F949} Bronze Tier
|
|
611
|
+
- Implement basic handler logic
|
|
612
|
+
- Pass 3 baseline unit tests
|
|
613
|
+
- *Goal: Foundational mastery*
|
|
613
614
|
|
|
614
615
|
</div>
|
|
615
616
|
<div>
|
|
616
617
|
|
|
617
|
-
### \u{1F948}
|
|
618
|
-
-
|
|
619
|
-
-
|
|
620
|
-
- *
|
|
618
|
+
### \u{1F948} Silver Tier
|
|
619
|
+
- Add boundary error handling
|
|
620
|
+
- Enforce O(N) memory complexity
|
|
621
|
+
- *Goal: Production-ready code*
|
|
621
622
|
|
|
622
623
|
</div>
|
|
623
624
|
<div>
|
|
624
625
|
|
|
625
|
-
### \u{1F947}
|
|
626
|
-
-
|
|
627
|
-
-
|
|
628
|
-
- *
|
|
626
|
+
### \u{1F947} Gold Tier
|
|
627
|
+
- Design distributed retry queue
|
|
628
|
+
- Add 95% automated test coverage
|
|
629
|
+
- *Goal: Architectural leadership*
|
|
629
630
|
|
|
630
631
|
</div>
|
|
631
632
|
</div>
|
|
632
633
|
|
|
633
634
|
<!--
|
|
634
635
|
Presenter Notes:
|
|
635
|
-
-
|
|
636
|
-
-
|
|
636
|
+
- All learners begin at Bronze to establish baseline competency.
|
|
637
|
+
- Accelerate self-directed learners to Silver and Gold as they complete each tier.
|
|
637
638
|
-->`
|
|
638
639
|
},
|
|
639
640
|
{
|
|
640
641
|
id: "agenda-timeline",
|
|
641
|
-
name: "
|
|
642
|
+
name: "Session Agenda & Milestones",
|
|
642
643
|
category: "content",
|
|
643
|
-
description: "
|
|
644
|
+
description: "Structured time-budgeted agenda mapping stages to measurable deliverables.",
|
|
644
645
|
layout: {
|
|
645
646
|
boxes: [
|
|
646
647
|
{
|
|
@@ -667,25 +668,25 @@ Presenter Notes:
|
|
|
667
668
|
pos: [80, 140, 1120, 520]
|
|
668
669
|
-->
|
|
669
670
|
|
|
670
|
-
## \u{1F5FA}\uFE0F
|
|
671
|
+
## \u{1F5FA}\uFE0F Milestone Roadmap & Time Budget
|
|
671
672
|
|
|
672
|
-
|
|
|
673
|
+
| Allocated Time | Session Stage | Core Learning Focus | Deliverable Milestone |
|
|
673
674
|
|:---:|---|---|---|
|
|
674
|
-
| **05
|
|
675
|
-
| **15
|
|
676
|
-
| **20
|
|
677
|
-
| **05
|
|
675
|
+
| **05 mins** | Warm-Up | Real-World Scenario & Context | Identify system bottleneck |
|
|
676
|
+
| **15 mins** | Concept Discovery | Core Architectural Patterns | Deconstruct message queue models |
|
|
677
|
+
| **20 mins** | Hands-On Lab | Tiered Code Implementation | Complete Bronze + Silver tasks |
|
|
678
|
+
| **05 mins** | Wrap-Up | Formative Checkpoint & Debrief | Consolidate key principles |
|
|
678
679
|
|
|
679
680
|
<!--
|
|
680
681
|
Presenter Notes:
|
|
681
|
-
-
|
|
682
|
+
- Walk through the time budget so students understand expectations and pacing.
|
|
682
683
|
-->`
|
|
683
684
|
},
|
|
684
685
|
{
|
|
685
686
|
id: "takeaways-summary",
|
|
686
|
-
name: "
|
|
687
|
+
name: "Key Takeaways & Wrap-up",
|
|
687
688
|
category: "content",
|
|
688
|
-
description: "
|
|
689
|
+
description: "Three memorable synthesis takeaways with actionable next steps.",
|
|
689
690
|
layout: {
|
|
690
691
|
boxes: [
|
|
691
692
|
{
|
|
@@ -724,18 +725,18 @@ Presenter Notes:
|
|
|
724
725
|
fontSize: 1.1rem
|
|
725
726
|
-->
|
|
726
727
|
|
|
727
|
-
## \u{1F3C1}
|
|
728
|
+
## \u{1F3C1} Key Takeaways & Action Items
|
|
728
729
|
|
|
729
|
-
1. **
|
|
730
|
-
2. **
|
|
731
|
-
3. **
|
|
730
|
+
1. **Decouple Before Scaling:** Separate producer rate from consumer processing capacity.
|
|
731
|
+
2. **Design for Failure:** Always configure retries, backoff intervals, and dead-letter queues.
|
|
732
|
+
3. **Measure End-to-End:** Track P99 latency and error rates across all distributed boundaries.
|
|
732
733
|
|
|
733
|
-
> \u{1F4DD} **
|
|
734
|
+
> \u{1F4DD} **Next Action Item:** Complete the Silver Tier refactoring challenge before our next peer-review session.
|
|
734
735
|
|
|
735
736
|
<!--
|
|
736
737
|
Presenter Notes:
|
|
737
|
-
-
|
|
738
|
-
-
|
|
738
|
+
- Deliver a crisp 2-minute wrap-up reinforcing the 3 core takeaways.
|
|
739
|
+
- Acknowledge strong peer collaboration during the hands-on lab.
|
|
739
740
|
-->`
|
|
740
741
|
}
|
|
741
742
|
];
|
|
@@ -752,5 +753,5 @@ exports.getSlideLayoutPresetsByCategory = getSlideLayoutPresetsByCategory;
|
|
|
752
753
|
exports.serializeLayoutToComment = serializeLayoutToComment;
|
|
753
754
|
exports.splitMarkdownSlides = splitMarkdownSlides;
|
|
754
755
|
exports.updateSlideLayoutInMarkdown = updateSlideLayoutInMarkdown;
|
|
755
|
-
//# sourceMappingURL=chunk-
|
|
756
|
-
//# sourceMappingURL=chunk-
|
|
756
|
+
//# sourceMappingURL=chunk-O5MCKVEA.cjs.map
|
|
757
|
+
//# sourceMappingURL=chunk-O5MCKVEA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/layout/serializer.ts","../src/core/layout/presets.ts"],"names":["yaml"],"mappings":"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","file":"chunk-O5MCKVEA.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 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// @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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkVLAPHJOC_cjs = require('./chunk-VLAPHJOC.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkO5MCKVEA_cjs = require('./chunk-O5MCKVEA.cjs');
|
|
5
5
|
|
|
6
6
|
// src/engine.ts
|
|
7
7
|
function createEngine(config = {}) {
|
|
@@ -102,7 +102,7 @@ async function convertMarkdownToPptx(markdown, options) {
|
|
|
102
102
|
if (options?.title) pptx.title = options.title;
|
|
103
103
|
if (options?.author) pptx.author = options.author;
|
|
104
104
|
const renderResult = chunkVLAPHJOC_cjs.renderSlide(markdown);
|
|
105
|
-
const { slides } =
|
|
105
|
+
const { slides } = chunkO5MCKVEA_cjs.splitMarkdownSlides(markdown);
|
|
106
106
|
const isDark = options?.theme !== "light";
|
|
107
107
|
const defaultBg = isDark ? "14151B" : "FFFFFF";
|
|
108
108
|
const defaultText = isDark ? "F1F5F9" : "1E293B";
|
|
@@ -313,27 +313,27 @@ Object.defineProperty(exports, "sanitizeMermaidCode", {
|
|
|
313
313
|
});
|
|
314
314
|
Object.defineProperty(exports, "SLIDE_LAYOUT_PRESETS", {
|
|
315
315
|
enumerable: true,
|
|
316
|
-
get: function () { return
|
|
316
|
+
get: function () { return chunkO5MCKVEA_cjs.SLIDE_LAYOUT_PRESETS; }
|
|
317
317
|
});
|
|
318
318
|
Object.defineProperty(exports, "getSlideLayoutPresetById", {
|
|
319
319
|
enumerable: true,
|
|
320
|
-
get: function () { return
|
|
320
|
+
get: function () { return chunkO5MCKVEA_cjs.getSlideLayoutPresetById; }
|
|
321
321
|
});
|
|
322
322
|
Object.defineProperty(exports, "getSlideLayoutPresetsByCategory", {
|
|
323
323
|
enumerable: true,
|
|
324
|
-
get: function () { return
|
|
324
|
+
get: function () { return chunkO5MCKVEA_cjs.getSlideLayoutPresetsByCategory; }
|
|
325
325
|
});
|
|
326
326
|
Object.defineProperty(exports, "serializeLayoutToComment", {
|
|
327
327
|
enumerable: true,
|
|
328
|
-
get: function () { return
|
|
328
|
+
get: function () { return chunkO5MCKVEA_cjs.serializeLayoutToComment; }
|
|
329
329
|
});
|
|
330
330
|
Object.defineProperty(exports, "splitMarkdownSlides", {
|
|
331
331
|
enumerable: true,
|
|
332
|
-
get: function () { return
|
|
332
|
+
get: function () { return chunkO5MCKVEA_cjs.splitMarkdownSlides; }
|
|
333
333
|
});
|
|
334
334
|
Object.defineProperty(exports, "updateSlideLayoutInMarkdown", {
|
|
335
335
|
enumerable: true,
|
|
336
|
-
get: function () { return
|
|
336
|
+
get: function () { return chunkO5MCKVEA_cjs.updateSlideLayoutInMarkdown; }
|
|
337
337
|
});
|
|
338
338
|
exports.cleanHexColor = cleanHexColor;
|
|
339
339
|
exports.convertMarkdownToPptx = convertMarkdownToPptx;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveTheme, generateScopedCss2, renderSlideAsync, renderSlide } from './chunk-JOW4QWKF.js';
|
|
2
2
|
export { convertTextArrows, countSlides, darkThemeTokens, defineTheme, detectMermaidBlocks, extractLayoutsAndNotes, extractMarpSource, extractMaxClicks, filterPresenterNotes, generateClickCss, generateLayoutCss, generateScopedCss2 as generateScopedCss, generateScopedCss as generateScopedCssFromTokens, getHighlighter, getThemeTokens, highlightCodeBlocks, isLayoutComment, lightThemeTokens, navyThemeTokens, parseLayoutFromComment, postprocessClicks, preprocessClicks, renderMarp, renderMermaidDiagrams, renderSlide, renderSlideAsync, resolveTheme, sanitizeMermaidCode } from './chunk-JOW4QWKF.js';
|
|
3
|
-
import { splitMarkdownSlides } from './chunk-
|
|
4
|
-
export { SLIDE_LAYOUT_PRESETS, getSlideLayoutPresetById, getSlideLayoutPresetsByCategory, serializeLayoutToComment, splitMarkdownSlides, updateSlideLayoutInMarkdown } from './chunk-
|
|
3
|
+
import { splitMarkdownSlides } from './chunk-3IKL6SBP.js';
|
|
4
|
+
export { SLIDE_LAYOUT_PRESETS, getSlideLayoutPresetById, getSlideLayoutPresetsByCategory, serializeLayoutToComment, splitMarkdownSlides, updateSlideLayoutInMarkdown } from './chunk-3IKL6SBP.js';
|
|
5
5
|
|
|
6
6
|
// src/engine.ts
|
|
7
7
|
function createEngine(config = {}) {
|