@thanh01.pmt/presentation-kit 0.2.15 → 0.2.17

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.
Files changed (39) hide show
  1. package/dist/ai/index.cjs +65 -116
  2. package/dist/ai/index.cjs.map +1 -1
  3. package/dist/ai/index.d.cts +18 -17
  4. package/dist/ai/index.d.ts +18 -17
  5. package/dist/ai/index.js +5 -103
  6. package/dist/ai/index.js.map +1 -1
  7. package/dist/chunk-6R6L6KSC.cjs +601 -0
  8. package/dist/chunk-6R6L6KSC.cjs.map +1 -0
  9. package/dist/{chunk-YPYAP4TF.js → chunk-7QHDWDSB.js} +218 -4
  10. package/dist/chunk-7QHDWDSB.js.map +1 -0
  11. package/dist/chunk-BHJXQCVE.js +588 -0
  12. package/dist/chunk-BHJXQCVE.js.map +1 -0
  13. package/dist/{chunk-SUGKWGJJ.cjs → chunk-JNTRKKJX.cjs} +218 -3
  14. package/dist/chunk-JNTRKKJX.cjs.map +1 -0
  15. package/dist/{click-css-CktIYP3H.d.ts → click-css-B2s9B_uP.d.ts} +2 -2
  16. package/dist/{click-css-Ch_jyWaw.d.cts → click-css-Bcc1CkTN.d.cts} +2 -2
  17. package/dist/index.cjs +64 -15
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +9 -5
  20. package/dist/index.d.ts +9 -5
  21. package/dist/index.js +3 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/{presets-Bkh6NzWf.d.cts → presets-BYvgAAkJ.d.cts} +2 -2
  24. package/dist/{presets-BUzebXzj.d.ts → presets-D_hfPJX9.d.ts} +2 -2
  25. package/dist/react/index.cjs +5 -5
  26. package/dist/react/index.d.cts +3 -3
  27. package/dist/react/index.d.ts +3 -3
  28. package/dist/react/index.js +1 -1
  29. package/dist/skills/index.cjs +52 -0
  30. package/dist/skills/index.cjs.map +1 -0
  31. package/dist/skills/index.d.cts +142 -0
  32. package/dist/skills/index.d.ts +142 -0
  33. package/dist/skills/index.js +3 -0
  34. package/dist/skills/index.js.map +1 -0
  35. package/dist/{types-8AVYoEUn.d.cts → types-C3d04zzP.d.cts} +1 -1
  36. package/dist/{types-8AVYoEUn.d.ts → types-C3d04zzP.d.ts} +1 -1
  37. package/package.json +7 -1
  38. package/dist/chunk-SUGKWGJJ.cjs.map +0 -1
  39. package/dist/chunk-YPYAP4TF.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { c as SlideLayoutCategory } from '../presets-Bkh6NzWf.cjs';
3
- import { b as SlideLayoutData, d as HtmlLayoutPresetId, f as HtmlDeckData, H as HtmlThemeName, m as HtmlSlideSlotData } from '../types-8AVYoEUn.cjs';
2
+ import { S as SlideLayoutCategory } from '../presets-BYvgAAkJ.cjs';
3
+ import { S as SlideLayoutData, H as HtmlLayoutPresetId, e as HtmlDeckData, f as HtmlThemeName, g as HtmlSlideSlotData } from '../types-C3d04zzP.cjs';
4
+ export { FRONTEND_SLIDES_CORE_RULES, FrontendSlidesSkillOptions, STYLE_PRESETS, StylePresetItem, TEMPLATES_CATALOG, TemplateCatalogItem, VIEWPORT_BASE_CSS, frontendSlidesTools, getFrontendSlidesSkillPrompt, getSlideStylePresetSchema, getStylePreset, getTemplatesCatalog, querySlideTemplatesSchema, searchTemplates } from '../skills/index.cjs';
4
5
 
5
6
  declare const listSlidePresetsSchema: z.ZodObject<{
6
7
  category: z.ZodOptional<z.ZodEnum<["all", "cover", "content", "split", "code", "metrics", "diagram", "quote", "assessment"]>>;
@@ -215,20 +216,20 @@ declare const validateSlideDeckSchema: z.ZodObject<{
215
216
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
216
217
  notes: z.ZodOptional<z.ZodString>;
217
218
  }, "strip", z.ZodTypeAny, {
218
- layoutId: string;
219
219
  slots: Record<string, any>;
220
+ layoutId: string;
220
221
  notes?: string | undefined;
221
222
  }, {
222
- layoutId: string;
223
223
  slots: Record<string, any>;
224
+ layoutId: string;
224
225
  notes?: string | undefined;
225
226
  }>, "many">>;
226
227
  }, "strip", z.ZodTypeAny, {
227
228
  title?: string | undefined;
228
229
  subtitle?: string | undefined;
229
230
  slides?: {
230
- layoutId: string;
231
231
  slots: Record<string, any>;
232
+ layoutId: string;
232
233
  notes?: string | undefined;
233
234
  }[] | undefined;
234
235
  theme?: string | undefined;
@@ -236,8 +237,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
236
237
  title?: string | undefined;
237
238
  subtitle?: string | undefined;
238
239
  slides?: {
239
- layoutId: string;
240
240
  slots: Record<string, any>;
241
+ layoutId: string;
241
242
  notes?: string | undefined;
242
243
  }[] | undefined;
243
244
  theme?: string | undefined;
@@ -251,8 +252,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
251
252
  title?: string | undefined;
252
253
  subtitle?: string | undefined;
253
254
  slides?: {
254
- layoutId: string;
255
255
  slots: Record<string, any>;
256
+ layoutId: string;
256
257
  notes?: string | undefined;
257
258
  }[] | undefined;
258
259
  theme?: string | undefined;
@@ -264,8 +265,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
264
265
  title?: string | undefined;
265
266
  subtitle?: string | undefined;
266
267
  slides?: {
267
- layoutId: string;
268
268
  slots: Record<string, any>;
269
+ layoutId: string;
269
270
  notes?: string | undefined;
270
271
  }[] | undefined;
271
272
  theme?: string | undefined;
@@ -324,12 +325,12 @@ declare const htmlSlideSlotDataSchema: z.ZodObject<{
324
325
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
325
326
  notes: z.ZodOptional<z.ZodString>;
326
327
  }, "strip", z.ZodTypeAny, {
327
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
328
328
  slots: Record<string, any>;
329
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
329
330
  notes?: string | undefined;
330
331
  }, {
331
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
332
332
  slots: Record<string, any>;
333
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
333
334
  notes?: string | undefined;
334
335
  }>;
335
336
  declare const generateHtmlDeckSchema: z.ZodObject<{
@@ -341,19 +342,19 @@ declare const generateHtmlDeckSchema: z.ZodObject<{
341
342
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
342
343
  notes: z.ZodOptional<z.ZodString>;
343
344
  }, "strip", z.ZodTypeAny, {
344
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
345
345
  slots: Record<string, any>;
346
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
346
347
  notes?: string | undefined;
347
348
  }, {
348
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
349
349
  slots: Record<string, any>;
350
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
350
351
  notes?: string | undefined;
351
352
  }>, "many">;
352
353
  }, "strip", z.ZodTypeAny, {
353
354
  title: string;
354
355
  slides: {
355
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
356
356
  slots: Record<string, any>;
357
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
357
358
  notes?: string | undefined;
358
359
  }[];
359
360
  theme: "blue-professional" | "editorial-forest" | "cobalt-grid" | "studio" | "monochrome";
@@ -361,8 +362,8 @@ declare const generateHtmlDeckSchema: z.ZodObject<{
361
362
  }, {
362
363
  title: string;
363
364
  slides: {
364
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
365
365
  slots: Record<string, any>;
366
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
366
367
  notes?: string | undefined;
367
368
  }[];
368
369
  subtitle?: string | undefined;
@@ -373,16 +374,16 @@ declare const createHtmlSlideSchema: z.ZodObject<{
373
374
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
374
375
  notes: z.ZodOptional<z.ZodString>;
375
376
  }, "strip", z.ZodTypeAny, {
376
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
377
377
  slots: Record<string, any>;
378
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
378
379
  notes?: string | undefined;
379
380
  }, {
380
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
381
381
  slots: Record<string, any>;
382
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
382
383
  notes?: string | undefined;
383
384
  }>;
384
385
 
385
- declare const SLIDE_HTML_PROMPT_CONTRACT = "\n# \uD83C\uDFA8 HTML SLIDE ENGINE \u2014 AGENT GENERATION CONTRACT\n\nYou are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.\nInstead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.\n\n## Available Layout Presets & Required Slots:\n\n1. **hero-cover** (Cover / Title Slide)\n - `tag` (string): e.g. \"Unit 01 \u00B7 Lesson 02\"\n - `title` (string): Main bold headline\n - `subtitle` (string): Subtitle or 1-sentence learning objective\n - `author` (string): Instructor / Organization\n - `date` (string): Course term or date\n\n2. **split-concept-code** (Theory + Code Snippet)\n - `tag` (string): Section topic tag\n - `title` (string): Topic heading\n - `points` (string[]): 3 to 4 concise bullet takeaways\n - `code` (string): Executable source code\n - `language` (string): Language name (e.g. \"python\", \"typescript\", \"swift\")\n - `codeNote` (string, optional): One-line hint or execution output\n\n3. **two-columns-compare** (Comparison / Pros vs Cons)\n - `tag` (string): Topic tag\n - `title` (string): Headline\n - `col1Title` (string): e.g. \"Synchronous I/O\"\n - `col1Items` (string[]): 3 to 4 points\n - `col2Title` (string): e.g. \"Asynchronous I/O\"\n - `col2Items` (string[]): 3 to 4 points\n\n4. **three-cards-grid** (3 Core Pillars / Architecture)\n - `tag` (string): e.g. \"Core Principles\"\n - `title` (string): Overview headline\n - `cards` (array of objects): Exactly 3 cards:\n - `badge`: e.g. \"01\", \"LAYER 1\"\n - `title`: Card headline\n - `desc`: 1-2 sentence description\n - `footer` (optional): Key takeaway\n\n5. **timeline-steps** (Algorithm / Execution Pipeline)\n - `tag` (string): e.g. \"Workflow\"\n - `title` (string): Headline\n - `steps` (array of objects): 3 to 5 steps:\n - `stepNum` (number/string): 1, 2, 3...\n - `title`: Step name\n - `desc`: What happens at this step\n\n6. **metric-callout** (Key Theorem / Benchmark Statistic)\n - `tag` (string): e.g. \"Time Complexity\"\n - `metric` (string): Big stat (e.g. \"O(log N)\", \"99.99%\", \"10x\")\n - `metricLabel` (string): e.g. \"Lookup Efficiency\"\n - `title` (string): Main takeaway\n - `desc` (string): Contextual explanation\n\n7. **checkpoint-quiz** (Interactive Checkpoint)\n - `tag` (string): e.g. \"Quick Knowledge Check\"\n - `question` (string): Clear question prompt\n - `options` (array of objects): 2 to 4 options:\n - `label`: \"A\", \"B\", \"C\", \"D\"\n - `text`: Option text\n - `explanation` (string): Explanatory rationale\n\n8. **summary-takeaways** (Wrap-Up / Next Steps)\n - `tag` (string): e.g. \"Recap\"\n - `title` (string): Wrap-up headline\n - `takeaways` (string[]): 3 to 4 memorable bullet points\n - `nextStep` (string): Teaser for the next lesson or project\n\n## Aesthetic & Quality Invariants (\"Anti-AI-Slop\"):\n- **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920\u00D71080 canvas. Maximum **35\u201340 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.\n- **Pedagogical Pacing:** Start with `hero-cover`, alternate between `split-concept-code`, `two-columns-compare` and `three-cards-grid`, insert a `checkpoint-quiz` midway, and finish with `summary-takeaways`.\n- **Theme Selection:**\n - `blue-professional`: General academic, clean engineering, trustworthy.\n - `cobalt-grid`: Advanced tech, algorithms, robotics, cybersecurity.\n - `editorial-forest`: Thoughtful design, literature, ethics, science.\n - `studio`: Minimalist product design, modern software.\n - `monochrome`: Pure high-contrast dark mode.\n\n## \uD83E\uDE84 Step Reveal & Progressive Disclosure:\n- The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.\n- Bullet lists (`points`, `col1Items`, `col2Items`), cards in `three-cards-grid`, and steps in `timeline-steps` reveal progressively one by one before navigating to the next slide.\n- In custom HTML slots, you can attach `class=\"step-reveal\"`, `data-step`, `data-reveal`, or `data-auto-reveal=\"true\"` on parent containers to enable click-by-click stepped appearance.\n\n## \uD83C\uDF99\uFE0F Mandatory 3-Part Presenter Notes Contract:\nEvery single slide MUST include the `notes` property structured with these 3 explicit components:\n1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.\n2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.\n3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.\n\nExample Notes:\n```markdown\nTalk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.\nCold-Call: \"Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?\"\nScaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).\n```\n";
386
+ declare const SLIDE_HTML_PROMPT_CONTRACT = "\n# \uD83C\uDFA8 HTML SLIDE ENGINE \u2014 AGENT GENERATION CONTRACT\n\nYou are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.\nInstead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.\n\n## Available Layout Presets & Required Slots:\n\n1. **hero-cover** (Cover / Title Slide)\n - `tag` (string): e.g. \"Unit 01 \u00B7 Lesson 02\"\n - `title` (string): Main bold headline\n - `subtitle` (string): Subtitle or 1-sentence learning objective\n - `author` (string): Instructor / Organization\n - `date` (string): Course term or date\n\n2. **split-concept-code** (Theory + Code Snippet)\n - `tag` (string): Section topic tag\n - `title` (string): Topic heading\n - `points` (string[]): 3 to 4 concise bullet takeaways\n - `code` (string): Executable source code\n - `language` (string): Language name (e.g. \"python\", \"typescript\", \"swift\")\n - `codeNote` (string, optional): One-line hint or execution output\n\n3. **two-columns-compare** (Comparison / Pros vs Cons)\n - `tag` (string): Topic tag\n - `title` (string): Headline\n - `col1Title` (string): e.g. \"Synchronous I/O\"\n - `col1Items` (string[]): 3 to 4 points\n - `col2Title` (string): e.g. \"Asynchronous I/O\"\n - `col2Items` (string[]): 3 to 4 points\n\n4. **three-cards-grid** (3 Core Pillars / Architecture)\n - `tag` (string): e.g. \"Core Principles\"\n - `title` (string): Overview headline\n - `cards` (array of objects): Exactly 3 cards:\n - `badge`: e.g. \"01\", \"LAYER 1\"\n - `title`: Card headline\n - `desc`: 1-2 sentence description\n - `footer` (optional): Key takeaway\n\n5. **timeline-steps** (Algorithm / Execution Pipeline)\n - `tag` (string): e.g. \"Workflow\"\n - `title` (string): Headline\n - `steps` (array of objects): 3 to 5 steps:\n - `stepNum` (number/string): 1, 2, 3...\n - `title`: Step name\n - `desc`: What happens at this step\n\n6. **metric-callout** (Key Theorem / Benchmark Statistic)\n - `tag` (string): e.g. \"Time Complexity\"\n - `metric` (string): Big stat (e.g. \"O(log N)\", \"99.99%\", \"10x\")\n - `metricLabel` (string): e.g. \"Lookup Efficiency\"\n - `title` (string): Main takeaway\n - `desc` (string): Contextual explanation\n\n7. **checkpoint-quiz** (Interactive Checkpoint)\n - `tag` (string): e.g. \"Quick Knowledge Check\"\n - `question` (string): Clear question prompt\n - `options` (array of objects): 2 to 4 options:\n - `label`: \"A\", \"B\", \"C\", \"D\"\n - `text`: Option text\n - `explanation` (string): Explanatory rationale\n\n8. **summary-takeaways** (Wrap-Up / Next Steps)\n - `tag` (string): e.g. \"Recap\"\n - `title` (string): Wrap-up headline\n - `takeaways` (string[]): 3 to 4 memorable bullet points\n - `nextStep` (string): Teaser for the next lesson or project\n\n## Aesthetic & Quality Invariants (\"Anti-AI-Slop\"):\n- **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920\u00D71080 canvas. Maximum **35\u201340 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.\n- **Pedagogical Pacing:** Start with `hero-cover`, alternate between `split-concept-code`, `two-columns-compare` and `three-cards-grid`, insert a `checkpoint-quiz` midway, and finish with `summary-takeaways`.\n- **Theme Selection:**\n - `blue-professional`: General academic, clean engineering, trustworthy.\n - `cobalt-grid`: Advanced tech, algorithms, robotics, cybersecurity.\n - `editorial-forest`: Thoughtful design, literature, ethics, science.\n - `studio`: Minimalist product design, modern software.\n - `monochrome`: Pure high-contrast dark mode.\n\n## \uD83E\uDE84 Step Reveal & Progressive Disclosure:\n- The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.\n- Bullet lists (`points`, `col1Items`, `col2Items`), cards in `three-cards-grid`, and steps in `timeline-steps` reveal progressively one by one before navigating to the next slide.\n- In custom HTML slots, you can attach `class=\"step-reveal\"`, `data-step`, `data-reveal`, or `data-auto-reveal=\"true\"` on parent containers to enable click-by-click stepped appearance.\n\n## \uD83C\uDF99\uFE0F Mandatory 3-Part Presenter Notes Contract:\nEvery single slide MUST include the `notes` property structured with these 3 explicit components:\n1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.\n2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.\n3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.\n\nExample Notes:\n```markdown\nTalk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.\nCold-Call: \"Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?\"\nScaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).\n```\n\n## \uD83E\uDDF1 MANDATORY JSON DECK OUTPUT STRUCTURE & SCHEMA:\nYou MUST output a single valid JSON object.\nCRITICAL: All layout data MUST be placed inside the `slots` object of each slide. Never put raw unstructured strings like `content: \"...\"`!\n\n```json\n{\n \"title\": \"Full Lesson Presentation Title\",\n \"theme\": \"blue-professional\",\n \"slides\": [\n {\n \"id\": 1,\n \"layoutId\": \"hero-cover\",\n \"slots\": {\n \"tag\": \"Unit 01 \u00B7 Lesson 01\",\n \"title\": \"macOS & Xcode Environment Setup\",\n \"subtitle\": \"Master the Apple developer toolchain and build your first SwiftUI application lifecycle\",\n \"author\": \"Curriculum OS\",\n \"date\": \"2026\"\n },\n \"notes\": \"Talk Track: Welcome everyone. Today we establish our core iOS development environment...\\nCold-Call: 'Alex, why do we need Xcode Command Line Tools?'\\nScaffolding Tip: Think of Xcode as the full workshop and the SDK as the raw materials.\"\n },\n {\n \"id\": 2,\n \"layoutId\": \"split-concept-code\",\n \"slots\": {\n \"tag\": \"Architecture & Syntax\",\n \"title\": \"SwiftUI App Entry Point\",\n \"points\": [\n \"@main attribute designates the entry point of the app\",\n \"App protocol defines the structure and scene hierarchy\",\n \"WindowGroup manages the root view lifecycle across platforms\"\n ],\n \"code\": \"import SwiftUI\\n\\n@main\\nstruct MyApp: App {\\n var body: some Scene {\\n WindowGroup {\\n ContentView()\\n }\\n }\\n}\",\n \"language\": \"swift\",\n \"codeNote\": \"Notice how Scene encapsulates WindowGroup automatically\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 3,\n \"layoutId\": \"three-cards-grid\",\n \"slots\": {\n \"tag\": \"Core Pillars\",\n \"title\": \"Three Pillars of App State\",\n \"cards\": [\n { \"badge\": \"01\", \"title\": \"Active State\", \"desc\": \"App is in foreground and responding to user events directly.\" },\n { \"badge\": \"02\", \"title\": \"Inactive State\", \"desc\": \"App is transitioning, interrupted by system dialogs or Control Center.\" },\n { \"badge\": \"03\", \"title\": \"Background State\", \"desc\": \"Executing background tasks or preparing for memory suspension.\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 4,\n \"layoutId\": \"timeline-steps\",\n \"slots\": {\n \"tag\": \"Step-by-Step\",\n \"title\": \"Xcode Setup Workflow\",\n \"steps\": [\n { \"stepNum\": 1, \"title\": \"Download Xcode\", \"desc\": \"Install latest Xcode from the Mac App Store\" },\n { \"stepNum\": 2, \"title\": \"Command Line Tools\", \"desc\": \"Run xcode-select --install in Terminal\" },\n { \"stepNum\": 3, \"title\": \"Select Simulators\", \"desc\": \"Download iOS 18+ runtime simulators\" },\n { \"stepNum\": 4, \"title\": \"Verify Build\", \"desc\": \"Create a new SwiftUI project and press Cmd+R\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 5,\n \"layoutId\": \"two-columns-compare\",\n \"slots\": {\n \"tag\": \"Comparison\",\n \"title\": \"SwiftUI vs UIKit Architecture\",\n \"col1Title\": \"SwiftUI (Declarative)\",\n \"col1Items\": [\n \"State drives the UI automatically\",\n \"Lightweight immutable structs\",\n \"Cross-platform unified API\"\n ],\n \"col2Title\": \"UIKit (Imperative)\",\n \"col2Items\": [\n \"Manual view controller manipulation\",\n \"Heavyweight class hierarchies\",\n \"Explicit event-driven updates\"\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 6,\n \"layoutId\": \"checkpoint-quiz\",\n \"slots\": {\n \"tag\": \"Knowledge Check\",\n \"question\": \"Which SwiftUI modifier is used to observe external observable state objects?\",\n \"options\": [\n { \"label\": \"A\", \"text\": \"@State\" },\n { \"label\": \"B\", \"text\": \"@StateObject / @ObservedObject\" },\n { \"label\": \"C\", \"text\": \"@Binding\" },\n { \"label\": \"D\", \"text\": \"@Environment\" }\n ],\n \"explanation\": \"@StateObject manages the lifecycle of reference-type ObservableObjects, while @State is for value types.\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 7,\n \"layoutId\": \"summary-takeaways\",\n \"slots\": {\n \"tag\": \"Recap & Next\",\n \"title\": \"Lesson Summary & Key Takeaways\",\n \"takeaways\": [\n \"Configured complete developer toolchain with Xcode 16+\",\n \"Understood SwiftUI declarative lifecycle and @main entry point\",\n \"Mastered App State transitions between active, inactive, and background\"\n ],\n \"nextStep\": \"Lesson 02: State Management & Reactive Data Flow with @State and @Binding\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n }\n ]\n}\n```\n\n## \uD83D\uDEAB STRICT ANTI-SLOP CONSTRAINTS:\n1. NEVER output a raw unstructured string like `content: \"...\"` or `content: \"Concept: ... Code snippet: ...\"`. All slide content MUST be placed inside the `slots` object with its specific keys (`points`, `code`, `cards`, `steps`, `options`, `takeaways`).\n2. NEVER use ellipsis `...` or placeholder comments in `code`. Every code snippet MUST be real, fully typed, syntax-valid, and pedagogical.\n3. NEVER leave `slots` empty `{}`.\n4. Output 6 to 8 substantive, rich slides covering the lesson plan thoroughly.\n";
386
387
 
387
388
  declare function handleListHtmlSlidePresets(input: {
388
389
  category?: string;
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
- import { c as SlideLayoutCategory } from '../presets-BUzebXzj.js';
3
- import { b as SlideLayoutData, d as HtmlLayoutPresetId, f as HtmlDeckData, H as HtmlThemeName, m as HtmlSlideSlotData } from '../types-8AVYoEUn.js';
2
+ import { S as SlideLayoutCategory } from '../presets-D_hfPJX9.js';
3
+ import { S as SlideLayoutData, H as HtmlLayoutPresetId, e as HtmlDeckData, f as HtmlThemeName, g as HtmlSlideSlotData } from '../types-C3d04zzP.js';
4
+ export { FRONTEND_SLIDES_CORE_RULES, FrontendSlidesSkillOptions, STYLE_PRESETS, StylePresetItem, TEMPLATES_CATALOG, TemplateCatalogItem, VIEWPORT_BASE_CSS, frontendSlidesTools, getFrontendSlidesSkillPrompt, getSlideStylePresetSchema, getStylePreset, getTemplatesCatalog, querySlideTemplatesSchema, searchTemplates } from '../skills/index.js';
4
5
 
5
6
  declare const listSlidePresetsSchema: z.ZodObject<{
6
7
  category: z.ZodOptional<z.ZodEnum<["all", "cover", "content", "split", "code", "metrics", "diagram", "quote", "assessment"]>>;
@@ -215,20 +216,20 @@ declare const validateSlideDeckSchema: z.ZodObject<{
215
216
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
216
217
  notes: z.ZodOptional<z.ZodString>;
217
218
  }, "strip", z.ZodTypeAny, {
218
- layoutId: string;
219
219
  slots: Record<string, any>;
220
+ layoutId: string;
220
221
  notes?: string | undefined;
221
222
  }, {
222
- layoutId: string;
223
223
  slots: Record<string, any>;
224
+ layoutId: string;
224
225
  notes?: string | undefined;
225
226
  }>, "many">>;
226
227
  }, "strip", z.ZodTypeAny, {
227
228
  title?: string | undefined;
228
229
  subtitle?: string | undefined;
229
230
  slides?: {
230
- layoutId: string;
231
231
  slots: Record<string, any>;
232
+ layoutId: string;
232
233
  notes?: string | undefined;
233
234
  }[] | undefined;
234
235
  theme?: string | undefined;
@@ -236,8 +237,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
236
237
  title?: string | undefined;
237
238
  subtitle?: string | undefined;
238
239
  slides?: {
239
- layoutId: string;
240
240
  slots: Record<string, any>;
241
+ layoutId: string;
241
242
  notes?: string | undefined;
242
243
  }[] | undefined;
243
244
  theme?: string | undefined;
@@ -251,8 +252,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
251
252
  title?: string | undefined;
252
253
  subtitle?: string | undefined;
253
254
  slides?: {
254
- layoutId: string;
255
255
  slots: Record<string, any>;
256
+ layoutId: string;
256
257
  notes?: string | undefined;
257
258
  }[] | undefined;
258
259
  theme?: string | undefined;
@@ -264,8 +265,8 @@ declare const validateSlideDeckSchema: z.ZodObject<{
264
265
  title?: string | undefined;
265
266
  subtitle?: string | undefined;
266
267
  slides?: {
267
- layoutId: string;
268
268
  slots: Record<string, any>;
269
+ layoutId: string;
269
270
  notes?: string | undefined;
270
271
  }[] | undefined;
271
272
  theme?: string | undefined;
@@ -324,12 +325,12 @@ declare const htmlSlideSlotDataSchema: z.ZodObject<{
324
325
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
325
326
  notes: z.ZodOptional<z.ZodString>;
326
327
  }, "strip", z.ZodTypeAny, {
327
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
328
328
  slots: Record<string, any>;
329
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
329
330
  notes?: string | undefined;
330
331
  }, {
331
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
332
332
  slots: Record<string, any>;
333
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
333
334
  notes?: string | undefined;
334
335
  }>;
335
336
  declare const generateHtmlDeckSchema: z.ZodObject<{
@@ -341,19 +342,19 @@ declare const generateHtmlDeckSchema: z.ZodObject<{
341
342
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
342
343
  notes: z.ZodOptional<z.ZodString>;
343
344
  }, "strip", z.ZodTypeAny, {
344
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
345
345
  slots: Record<string, any>;
346
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
346
347
  notes?: string | undefined;
347
348
  }, {
348
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
349
349
  slots: Record<string, any>;
350
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
350
351
  notes?: string | undefined;
351
352
  }>, "many">;
352
353
  }, "strip", z.ZodTypeAny, {
353
354
  title: string;
354
355
  slides: {
355
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
356
356
  slots: Record<string, any>;
357
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
357
358
  notes?: string | undefined;
358
359
  }[];
359
360
  theme: "blue-professional" | "editorial-forest" | "cobalt-grid" | "studio" | "monochrome";
@@ -361,8 +362,8 @@ declare const generateHtmlDeckSchema: z.ZodObject<{
361
362
  }, {
362
363
  title: string;
363
364
  slides: {
364
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
365
365
  slots: Record<string, any>;
366
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
366
367
  notes?: string | undefined;
367
368
  }[];
368
369
  subtitle?: string | undefined;
@@ -373,16 +374,16 @@ declare const createHtmlSlideSchema: z.ZodObject<{
373
374
  slots: z.ZodRecord<z.ZodString, z.ZodAny>;
374
375
  notes: z.ZodOptional<z.ZodString>;
375
376
  }, "strip", z.ZodTypeAny, {
376
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
377
377
  slots: Record<string, any>;
378
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
378
379
  notes?: string | undefined;
379
380
  }, {
380
- layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
381
381
  slots: Record<string, any>;
382
+ layoutId: "hero-cover" | "split-concept-code" | "two-columns-compare" | "three-cards-grid" | "timeline-steps" | "metric-callout" | "checkpoint-quiz" | "summary-takeaways";
382
383
  notes?: string | undefined;
383
384
  }>;
384
385
 
385
- declare const SLIDE_HTML_PROMPT_CONTRACT = "\n# \uD83C\uDFA8 HTML SLIDE ENGINE \u2014 AGENT GENERATION CONTRACT\n\nYou are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.\nInstead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.\n\n## Available Layout Presets & Required Slots:\n\n1. **hero-cover** (Cover / Title Slide)\n - `tag` (string): e.g. \"Unit 01 \u00B7 Lesson 02\"\n - `title` (string): Main bold headline\n - `subtitle` (string): Subtitle or 1-sentence learning objective\n - `author` (string): Instructor / Organization\n - `date` (string): Course term or date\n\n2. **split-concept-code** (Theory + Code Snippet)\n - `tag` (string): Section topic tag\n - `title` (string): Topic heading\n - `points` (string[]): 3 to 4 concise bullet takeaways\n - `code` (string): Executable source code\n - `language` (string): Language name (e.g. \"python\", \"typescript\", \"swift\")\n - `codeNote` (string, optional): One-line hint or execution output\n\n3. **two-columns-compare** (Comparison / Pros vs Cons)\n - `tag` (string): Topic tag\n - `title` (string): Headline\n - `col1Title` (string): e.g. \"Synchronous I/O\"\n - `col1Items` (string[]): 3 to 4 points\n - `col2Title` (string): e.g. \"Asynchronous I/O\"\n - `col2Items` (string[]): 3 to 4 points\n\n4. **three-cards-grid** (3 Core Pillars / Architecture)\n - `tag` (string): e.g. \"Core Principles\"\n - `title` (string): Overview headline\n - `cards` (array of objects): Exactly 3 cards:\n - `badge`: e.g. \"01\", \"LAYER 1\"\n - `title`: Card headline\n - `desc`: 1-2 sentence description\n - `footer` (optional): Key takeaway\n\n5. **timeline-steps** (Algorithm / Execution Pipeline)\n - `tag` (string): e.g. \"Workflow\"\n - `title` (string): Headline\n - `steps` (array of objects): 3 to 5 steps:\n - `stepNum` (number/string): 1, 2, 3...\n - `title`: Step name\n - `desc`: What happens at this step\n\n6. **metric-callout** (Key Theorem / Benchmark Statistic)\n - `tag` (string): e.g. \"Time Complexity\"\n - `metric` (string): Big stat (e.g. \"O(log N)\", \"99.99%\", \"10x\")\n - `metricLabel` (string): e.g. \"Lookup Efficiency\"\n - `title` (string): Main takeaway\n - `desc` (string): Contextual explanation\n\n7. **checkpoint-quiz** (Interactive Checkpoint)\n - `tag` (string): e.g. \"Quick Knowledge Check\"\n - `question` (string): Clear question prompt\n - `options` (array of objects): 2 to 4 options:\n - `label`: \"A\", \"B\", \"C\", \"D\"\n - `text`: Option text\n - `explanation` (string): Explanatory rationale\n\n8. **summary-takeaways** (Wrap-Up / Next Steps)\n - `tag` (string): e.g. \"Recap\"\n - `title` (string): Wrap-up headline\n - `takeaways` (string[]): 3 to 4 memorable bullet points\n - `nextStep` (string): Teaser for the next lesson or project\n\n## Aesthetic & Quality Invariants (\"Anti-AI-Slop\"):\n- **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920\u00D71080 canvas. Maximum **35\u201340 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.\n- **Pedagogical Pacing:** Start with `hero-cover`, alternate between `split-concept-code`, `two-columns-compare` and `three-cards-grid`, insert a `checkpoint-quiz` midway, and finish with `summary-takeaways`.\n- **Theme Selection:**\n - `blue-professional`: General academic, clean engineering, trustworthy.\n - `cobalt-grid`: Advanced tech, algorithms, robotics, cybersecurity.\n - `editorial-forest`: Thoughtful design, literature, ethics, science.\n - `studio`: Minimalist product design, modern software.\n - `monochrome`: Pure high-contrast dark mode.\n\n## \uD83E\uDE84 Step Reveal & Progressive Disclosure:\n- The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.\n- Bullet lists (`points`, `col1Items`, `col2Items`), cards in `three-cards-grid`, and steps in `timeline-steps` reveal progressively one by one before navigating to the next slide.\n- In custom HTML slots, you can attach `class=\"step-reveal\"`, `data-step`, `data-reveal`, or `data-auto-reveal=\"true\"` on parent containers to enable click-by-click stepped appearance.\n\n## \uD83C\uDF99\uFE0F Mandatory 3-Part Presenter Notes Contract:\nEvery single slide MUST include the `notes` property structured with these 3 explicit components:\n1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.\n2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.\n3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.\n\nExample Notes:\n```markdown\nTalk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.\nCold-Call: \"Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?\"\nScaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).\n```\n";
386
+ declare const SLIDE_HTML_PROMPT_CONTRACT = "\n# \uD83C\uDFA8 HTML SLIDE ENGINE \u2014 AGENT GENERATION CONTRACT\n\nYou are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.\nInstead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.\n\n## Available Layout Presets & Required Slots:\n\n1. **hero-cover** (Cover / Title Slide)\n - `tag` (string): e.g. \"Unit 01 \u00B7 Lesson 02\"\n - `title` (string): Main bold headline\n - `subtitle` (string): Subtitle or 1-sentence learning objective\n - `author` (string): Instructor / Organization\n - `date` (string): Course term or date\n\n2. **split-concept-code** (Theory + Code Snippet)\n - `tag` (string): Section topic tag\n - `title` (string): Topic heading\n - `points` (string[]): 3 to 4 concise bullet takeaways\n - `code` (string): Executable source code\n - `language` (string): Language name (e.g. \"python\", \"typescript\", \"swift\")\n - `codeNote` (string, optional): One-line hint or execution output\n\n3. **two-columns-compare** (Comparison / Pros vs Cons)\n - `tag` (string): Topic tag\n - `title` (string): Headline\n - `col1Title` (string): e.g. \"Synchronous I/O\"\n - `col1Items` (string[]): 3 to 4 points\n - `col2Title` (string): e.g. \"Asynchronous I/O\"\n - `col2Items` (string[]): 3 to 4 points\n\n4. **three-cards-grid** (3 Core Pillars / Architecture)\n - `tag` (string): e.g. \"Core Principles\"\n - `title` (string): Overview headline\n - `cards` (array of objects): Exactly 3 cards:\n - `badge`: e.g. \"01\", \"LAYER 1\"\n - `title`: Card headline\n - `desc`: 1-2 sentence description\n - `footer` (optional): Key takeaway\n\n5. **timeline-steps** (Algorithm / Execution Pipeline)\n - `tag` (string): e.g. \"Workflow\"\n - `title` (string): Headline\n - `steps` (array of objects): 3 to 5 steps:\n - `stepNum` (number/string): 1, 2, 3...\n - `title`: Step name\n - `desc`: What happens at this step\n\n6. **metric-callout** (Key Theorem / Benchmark Statistic)\n - `tag` (string): e.g. \"Time Complexity\"\n - `metric` (string): Big stat (e.g. \"O(log N)\", \"99.99%\", \"10x\")\n - `metricLabel` (string): e.g. \"Lookup Efficiency\"\n - `title` (string): Main takeaway\n - `desc` (string): Contextual explanation\n\n7. **checkpoint-quiz** (Interactive Checkpoint)\n - `tag` (string): e.g. \"Quick Knowledge Check\"\n - `question` (string): Clear question prompt\n - `options` (array of objects): 2 to 4 options:\n - `label`: \"A\", \"B\", \"C\", \"D\"\n - `text`: Option text\n - `explanation` (string): Explanatory rationale\n\n8. **summary-takeaways** (Wrap-Up / Next Steps)\n - `tag` (string): e.g. \"Recap\"\n - `title` (string): Wrap-up headline\n - `takeaways` (string[]): 3 to 4 memorable bullet points\n - `nextStep` (string): Teaser for the next lesson or project\n\n## Aesthetic & Quality Invariants (\"Anti-AI-Slop\"):\n- **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920\u00D71080 canvas. Maximum **35\u201340 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.\n- **Pedagogical Pacing:** Start with `hero-cover`, alternate between `split-concept-code`, `two-columns-compare` and `three-cards-grid`, insert a `checkpoint-quiz` midway, and finish with `summary-takeaways`.\n- **Theme Selection:**\n - `blue-professional`: General academic, clean engineering, trustworthy.\n - `cobalt-grid`: Advanced tech, algorithms, robotics, cybersecurity.\n - `editorial-forest`: Thoughtful design, literature, ethics, science.\n - `studio`: Minimalist product design, modern software.\n - `monochrome`: Pure high-contrast dark mode.\n\n## \uD83E\uDE84 Step Reveal & Progressive Disclosure:\n- The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.\n- Bullet lists (`points`, `col1Items`, `col2Items`), cards in `three-cards-grid`, and steps in `timeline-steps` reveal progressively one by one before navigating to the next slide.\n- In custom HTML slots, you can attach `class=\"step-reveal\"`, `data-step`, `data-reveal`, or `data-auto-reveal=\"true\"` on parent containers to enable click-by-click stepped appearance.\n\n## \uD83C\uDF99\uFE0F Mandatory 3-Part Presenter Notes Contract:\nEvery single slide MUST include the `notes` property structured with these 3 explicit components:\n1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.\n2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.\n3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.\n\nExample Notes:\n```markdown\nTalk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.\nCold-Call: \"Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?\"\nScaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).\n```\n\n## \uD83E\uDDF1 MANDATORY JSON DECK OUTPUT STRUCTURE & SCHEMA:\nYou MUST output a single valid JSON object.\nCRITICAL: All layout data MUST be placed inside the `slots` object of each slide. Never put raw unstructured strings like `content: \"...\"`!\n\n```json\n{\n \"title\": \"Full Lesson Presentation Title\",\n \"theme\": \"blue-professional\",\n \"slides\": [\n {\n \"id\": 1,\n \"layoutId\": \"hero-cover\",\n \"slots\": {\n \"tag\": \"Unit 01 \u00B7 Lesson 01\",\n \"title\": \"macOS & Xcode Environment Setup\",\n \"subtitle\": \"Master the Apple developer toolchain and build your first SwiftUI application lifecycle\",\n \"author\": \"Curriculum OS\",\n \"date\": \"2026\"\n },\n \"notes\": \"Talk Track: Welcome everyone. Today we establish our core iOS development environment...\\nCold-Call: 'Alex, why do we need Xcode Command Line Tools?'\\nScaffolding Tip: Think of Xcode as the full workshop and the SDK as the raw materials.\"\n },\n {\n \"id\": 2,\n \"layoutId\": \"split-concept-code\",\n \"slots\": {\n \"tag\": \"Architecture & Syntax\",\n \"title\": \"SwiftUI App Entry Point\",\n \"points\": [\n \"@main attribute designates the entry point of the app\",\n \"App protocol defines the structure and scene hierarchy\",\n \"WindowGroup manages the root view lifecycle across platforms\"\n ],\n \"code\": \"import SwiftUI\\n\\n@main\\nstruct MyApp: App {\\n var body: some Scene {\\n WindowGroup {\\n ContentView()\\n }\\n }\\n}\",\n \"language\": \"swift\",\n \"codeNote\": \"Notice how Scene encapsulates WindowGroup automatically\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 3,\n \"layoutId\": \"three-cards-grid\",\n \"slots\": {\n \"tag\": \"Core Pillars\",\n \"title\": \"Three Pillars of App State\",\n \"cards\": [\n { \"badge\": \"01\", \"title\": \"Active State\", \"desc\": \"App is in foreground and responding to user events directly.\" },\n { \"badge\": \"02\", \"title\": \"Inactive State\", \"desc\": \"App is transitioning, interrupted by system dialogs or Control Center.\" },\n { \"badge\": \"03\", \"title\": \"Background State\", \"desc\": \"Executing background tasks or preparing for memory suspension.\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 4,\n \"layoutId\": \"timeline-steps\",\n \"slots\": {\n \"tag\": \"Step-by-Step\",\n \"title\": \"Xcode Setup Workflow\",\n \"steps\": [\n { \"stepNum\": 1, \"title\": \"Download Xcode\", \"desc\": \"Install latest Xcode from the Mac App Store\" },\n { \"stepNum\": 2, \"title\": \"Command Line Tools\", \"desc\": \"Run xcode-select --install in Terminal\" },\n { \"stepNum\": 3, \"title\": \"Select Simulators\", \"desc\": \"Download iOS 18+ runtime simulators\" },\n { \"stepNum\": 4, \"title\": \"Verify Build\", \"desc\": \"Create a new SwiftUI project and press Cmd+R\" }\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 5,\n \"layoutId\": \"two-columns-compare\",\n \"slots\": {\n \"tag\": \"Comparison\",\n \"title\": \"SwiftUI vs UIKit Architecture\",\n \"col1Title\": \"SwiftUI (Declarative)\",\n \"col1Items\": [\n \"State drives the UI automatically\",\n \"Lightweight immutable structs\",\n \"Cross-platform unified API\"\n ],\n \"col2Title\": \"UIKit (Imperative)\",\n \"col2Items\": [\n \"Manual view controller manipulation\",\n \"Heavyweight class hierarchies\",\n \"Explicit event-driven updates\"\n ]\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 6,\n \"layoutId\": \"checkpoint-quiz\",\n \"slots\": {\n \"tag\": \"Knowledge Check\",\n \"question\": \"Which SwiftUI modifier is used to observe external observable state objects?\",\n \"options\": [\n { \"label\": \"A\", \"text\": \"@State\" },\n { \"label\": \"B\", \"text\": \"@StateObject / @ObservedObject\" },\n { \"label\": \"C\", \"text\": \"@Binding\" },\n { \"label\": \"D\", \"text\": \"@Environment\" }\n ],\n \"explanation\": \"@StateObject manages the lifecycle of reference-type ObservableObjects, while @State is for value types.\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n },\n {\n \"id\": 7,\n \"layoutId\": \"summary-takeaways\",\n \"slots\": {\n \"tag\": \"Recap & Next\",\n \"title\": \"Lesson Summary & Key Takeaways\",\n \"takeaways\": [\n \"Configured complete developer toolchain with Xcode 16+\",\n \"Understood SwiftUI declarative lifecycle and @main entry point\",\n \"Mastered App State transitions between active, inactive, and background\"\n ],\n \"nextStep\": \"Lesson 02: State Management & Reactive Data Flow with @State and @Binding\"\n },\n \"notes\": \"Talk Track: ...\\nCold-Call: ...\\nScaffolding Tip: ...\"\n }\n ]\n}\n```\n\n## \uD83D\uDEAB STRICT ANTI-SLOP CONSTRAINTS:\n1. NEVER output a raw unstructured string like `content: \"...\"` or `content: \"Concept: ... Code snippet: ...\"`. All slide content MUST be placed inside the `slots` object with its specific keys (`points`, `code`, `cards`, `steps`, `options`, `takeaways`).\n2. NEVER use ellipsis `...` or placeholder comments in `code`. Every code snippet MUST be real, fully typed, syntax-valid, and pedagogical.\n3. NEVER leave `slots` empty `{}`.\n4. Output 6 to 8 substantive, rich slides covering the lesson plan thoroughly.\n";
386
387
 
387
388
  declare function handleListHtmlSlidePresets(input: {
388
389
  category?: string;
package/dist/ai/index.js CHANGED
@@ -1,4 +1,5 @@
1
- import { SLIDE_LAYOUT_PRESETS, getSlideLayoutPresetsByCategory, getSlideLayoutPresetById, serializeLayoutToComment, updateSlideLayoutInMarkdown, splitMarkdownSlides, HTML_SLIDE_PRESETS, HTML_THEMES, compileHtmlDeck } from '../chunk-YPYAP4TF.js';
1
+ export { FRONTEND_SLIDES_CORE_RULES, SLIDE_HTML_PROMPT_CONTRACT, STYLE_PRESETS, TEMPLATES_CATALOG, VIEWPORT_BASE_CSS, frontendSlidesTools, getFrontendSlidesSkillPrompt, getSlideStylePresetSchema, getStylePreset, getTemplatesCatalog, querySlideTemplatesSchema, searchTemplates } from '../chunk-BHJXQCVE.js';
2
+ import { SLIDE_LAYOUT_PRESETS, getSlideLayoutPresetsByCategory, getSlideLayoutPresetById, serializeLayoutToComment, updateSlideLayoutInMarkdown, splitMarkdownSlides, HTML_SLIDE_PRESETS, normalizeSlideSlots, HTML_THEMES, compileHtmlDeck } from '../chunk-7QHDWDSB.js';
2
3
  import { z } from 'zod';
3
4
 
4
5
  var listSlidePresetsSchema = z.object({
@@ -480,9 +481,10 @@ function validateHtmlSlideDeck(deck, strict = false) {
480
481
  if (preset.category === "cover" && idx === 0) hasCover = true;
481
482
  if (preset.id === "checkpoint-quiz") hasQuiz = true;
482
483
  if (preset.id === "summary-takeaways") hasSummary = true;
484
+ const slots = normalizeSlideSlots(slide);
483
485
  for (const slotDef of preset.slots) {
484
486
  if (slotDef.required) {
485
- const val = slide.slots?.[slotDef.name];
487
+ const val = slots[slotDef.name];
486
488
  if (val === void 0 || val === null || typeof val === "string" && val.trim() === "") {
487
489
  issues.push({
488
490
  slideIndex: slideNumber,
@@ -493,7 +495,6 @@ function validateHtmlSlideDeck(deck, strict = false) {
493
495
  }
494
496
  }
495
497
  }
496
- const slots = slide.slots || {};
497
498
  for (const [key, val] of Object.entries(slots)) {
498
499
  if (typeof val === "string") {
499
500
  const words = countWords(val);
@@ -768,105 +769,6 @@ var createHtmlSlideSchema = z.object({
768
769
  notes: z.string().optional().describe("Speaker talk track or question prompts")
769
770
  });
770
771
 
771
- // src/ai/html/prompt.ts
772
- var SLIDE_HTML_PROMPT_CONTRACT = `
773
- # \u{1F3A8} HTML SLIDE ENGINE \u2014 AGENT GENERATION CONTRACT
774
-
775
- You are an expert Presentation Designer and Curriculum Architect producing professional, high-impact slide decks.
776
- Instead of generating free-form HTML or brittle Markdown hacks, you MUST fill structured content into pre-tested **Layout Presets**.
777
-
778
- ## Available Layout Presets & Required Slots:
779
-
780
- 1. **hero-cover** (Cover / Title Slide)
781
- - \`tag\` (string): e.g. "Unit 01 \xB7 Lesson 02"
782
- - \`title\` (string): Main bold headline
783
- - \`subtitle\` (string): Subtitle or 1-sentence learning objective
784
- - \`author\` (string): Instructor / Organization
785
- - \`date\` (string): Course term or date
786
-
787
- 2. **split-concept-code** (Theory + Code Snippet)
788
- - \`tag\` (string): Section topic tag
789
- - \`title\` (string): Topic heading
790
- - \`points\` (string[]): 3 to 4 concise bullet takeaways
791
- - \`code\` (string): Executable source code
792
- - \`language\` (string): Language name (e.g. "python", "typescript", "swift")
793
- - \`codeNote\` (string, optional): One-line hint or execution output
794
-
795
- 3. **two-columns-compare** (Comparison / Pros vs Cons)
796
- - \`tag\` (string): Topic tag
797
- - \`title\` (string): Headline
798
- - \`col1Title\` (string): e.g. "Synchronous I/O"
799
- - \`col1Items\` (string[]): 3 to 4 points
800
- - \`col2Title\` (string): e.g. "Asynchronous I/O"
801
- - \`col2Items\` (string[]): 3 to 4 points
802
-
803
- 4. **three-cards-grid** (3 Core Pillars / Architecture)
804
- - \`tag\` (string): e.g. "Core Principles"
805
- - \`title\` (string): Overview headline
806
- - \`cards\` (array of objects): Exactly 3 cards:
807
- - \`badge\`: e.g. "01", "LAYER 1"
808
- - \`title\`: Card headline
809
- - \`desc\`: 1-2 sentence description
810
- - \`footer\` (optional): Key takeaway
811
-
812
- 5. **timeline-steps** (Algorithm / Execution Pipeline)
813
- - \`tag\` (string): e.g. "Workflow"
814
- - \`title\` (string): Headline
815
- - \`steps\` (array of objects): 3 to 5 steps:
816
- - \`stepNum\` (number/string): 1, 2, 3...
817
- - \`title\`: Step name
818
- - \`desc\`: What happens at this step
819
-
820
- 6. **metric-callout** (Key Theorem / Benchmark Statistic)
821
- - \`tag\` (string): e.g. "Time Complexity"
822
- - \`metric\` (string): Big stat (e.g. "O(log N)", "99.99%", "10x")
823
- - \`metricLabel\` (string): e.g. "Lookup Efficiency"
824
- - \`title\` (string): Main takeaway
825
- - \`desc\` (string): Contextual explanation
826
-
827
- 7. **checkpoint-quiz** (Interactive Checkpoint)
828
- - \`tag\` (string): e.g. "Quick Knowledge Check"
829
- - \`question\` (string): Clear question prompt
830
- - \`options\` (array of objects): 2 to 4 options:
831
- - \`label\`: "A", "B", "C", "D"
832
- - \`text\`: Option text
833
- - \`explanation\` (string): Explanatory rationale
834
-
835
- 8. **summary-takeaways** (Wrap-Up / Next Steps)
836
- - \`tag\` (string): e.g. "Recap"
837
- - \`title\` (string): Wrap-up headline
838
- - \`takeaways\` (string[]): 3 to 4 memorable bullet points
839
- - \`nextStep\` (string): Teaser for the next lesson or project
840
-
841
- ## Aesthetic & Quality Invariants ("Anti-AI-Slop"):
842
- - **Brevity is King (Zero-Scroll Invariant):** Each slide is calibrated for a 1920\xD71080 canvas. Maximum **35\u201340 words** per card or column; maximum **15 words** per bullet item. Never write dense multi-sentence paragraphs that cause vertical scrolling.
843
- - **Pedagogical Pacing:** Start with \`hero-cover\`, alternate between \`split-concept-code\`, \`two-columns-compare\` and \`three-cards-grid\`, insert a \`checkpoint-quiz\` midway, and finish with \`summary-takeaways\`.
844
- - **Theme Selection:**
845
- - \`blue-professional\`: General academic, clean engineering, trustworthy.
846
- - \`cobalt-grid\`: Advanced tech, algorithms, robotics, cybersecurity.
847
- - \`editorial-forest\`: Thoughtful design, literature, ethics, science.
848
- - \`studio\`: Minimalist product design, modern software.
849
- - \`monochrome\`: Pure high-contrast dark mode.
850
-
851
- ## \u{1FA84} Step Reveal & Progressive Disclosure:
852
- - The presentation shell supports sequential step reveal via mouse click or Space/Arrow keys.
853
- - Bullet lists (\`points\`, \`col1Items\`, \`col2Items\`), cards in \`three-cards-grid\`, and steps in \`timeline-steps\` reveal progressively one by one before navigating to the next slide.
854
- - In custom HTML slots, you can attach \`class="step-reveal"\`, \`data-step\`, \`data-reveal\`, or \`data-auto-reveal="true"\` on parent containers to enable click-by-click stepped appearance.
855
-
856
- ## \u{1F399}\uFE0F Mandatory 3-Part Presenter Notes Contract:
857
- Every single slide MUST include the \`notes\` property structured with these 3 explicit components:
858
- 1. **Talk Track:** 2-3 sentences of exact conversational speaking script for the teacher/presenter.
859
- 2. **Cold-Call Check Question:** 1 diagnostic question to check understanding with a named student or attendee.
860
- 3. **Scaffolding Tip:** 1 intuitive analogy or troubleshooting hint in case learners struggle with the concept.
861
-
862
- Example Notes:
863
- \`\`\`markdown
864
- Talk Track: Here we contrast synchronous blocking I/O with asynchronous event-driven handling. Notice how threads remain idle while waiting for network responses.
865
- Cold-Call: "Jordan, looking at the left column, what happens to thread pool throughput when network latency quadruples?"
866
- Scaffolding Tip: Compare it to ordering coffee at a counter (async buzzer) versus waiting at the register until the cup is brewed (sync blocking).
867
- \`\`\`
868
- `;
869
-
870
772
  // src/ai/html/tools.ts
871
773
  function handleListHtmlSlidePresets(input) {
872
774
  const category = input.category || "all";
@@ -927,6 +829,6 @@ var executeListHtmlSlidePresets = handleListHtmlSlidePresets;
927
829
  var executeGenerateHtmlDeck = handleGenerateHtmlDeck;
928
830
  var executeCreateHtmlSlide = handleCreateHtmlSlide;
929
831
 
930
- export { SLIDE_DESIGN_PROMPT_CONTRACT, SLIDE_HTML_PROMPT_CONTRACT, applySlideLayoutSchema, createHtmlSlideSchema, createSlideFromPresetSchema, executeApplySlideLayout, executeCreateHtmlSlide, executeCreateSlideFromPreset, executeGenerateDeckOutline, executeGenerateHtmlDeck, executeListHtmlSlidePresets, executeListSlidePresets, executeUpdatePresenterNotes, executeValidateSlideDeck, generateDeckOutlineSchema, generateHtmlDeckSchema, handleCreateHtmlSlide, handleGenerateHtmlDeck, handleListHtmlSlidePresets, handleValidateSlideDeck, htmlSlideSlotDataSchema, listHtmlSlidePresetsSchema, listSlidePresetsSchema, updatePresenterNotesSchema, validateHtmlSlideDeck, validateMarkdownSlideDeck, validateSlideDeckSchema };
832
+ export { SLIDE_DESIGN_PROMPT_CONTRACT, applySlideLayoutSchema, createHtmlSlideSchema, createSlideFromPresetSchema, executeApplySlideLayout, executeCreateHtmlSlide, executeCreateSlideFromPreset, executeGenerateDeckOutline, executeGenerateHtmlDeck, executeListHtmlSlidePresets, executeListSlidePresets, executeUpdatePresenterNotes, executeValidateSlideDeck, generateDeckOutlineSchema, generateHtmlDeckSchema, handleCreateHtmlSlide, handleGenerateHtmlDeck, handleListHtmlSlidePresets, handleValidateSlideDeck, htmlSlideSlotDataSchema, listHtmlSlidePresetsSchema, listSlidePresetsSchema, updatePresenterNotesSchema, validateHtmlSlideDeck, validateMarkdownSlideDeck, validateSlideDeckSchema };
931
833
  //# sourceMappingURL=index.js.map
932
834
  //# sourceMappingURL=index.js.map