@lofcz/pptist 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/embed/agentic-manifest.json +206 -36
- package/dist/embed/pptist-embed.css +1 -1
- package/dist/embed/pptist-embed.js +20751 -20499
- package/dist/types/configs/font.d.ts +6 -4
- package/dist/types/embed/agentic/layouts.d.ts +72 -0
- package/dist/types/embed/agentic/styles.d.ts +111 -0
- package/dist/types/embed/agentic/templates.d.ts +32 -0
- package/dist/types/embed/agentic/types.d.ts +43 -0
- package/dist/types/i18n/i18n-types.d.ts +2 -2
- package/dist/types/store/slides.d.ts +3 -0
- package/dist/types/types/slides.d.ts +7 -0
- package/package.json +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@lofcz/pptist",
|
|
4
|
-
"packageVersion": "2.0.
|
|
5
|
-
"generatedAt": "2026-06-
|
|
6
|
-
"summary": "Authoring guidance for the PPTist agentic bridge: the
|
|
7
|
-
"commandCount":
|
|
4
|
+
"packageVersion": "2.0.10",
|
|
5
|
+
"generatedAt": "2026-06-02T05:17:27.619Z",
|
|
6
|
+
"summary": "Authoring guidance for the PPTist agentic bridge. The fast, reliable way to build a deck: (1) pick ONE built-in presentation template (the same styles as the template picker — template_1 … template_8) with deck.applyTemplate, (2) read templates.slidesCatalog for that template's slide slugs grouped by type (cover, contents, transition, content, end), then (3) insert slides with slides.insertFromTemplate and edit text via text.setMarkdown. Do NOT build decks from blank slides.create or hand-placed elements unless no template slide fits. Content is Markdown or plain text — never hand-written HTML. Pair this with the machine schema (command payload/return types) in the same manifest.",
|
|
7
|
+
"commandCount": 173,
|
|
8
8
|
"designSystem": {
|
|
9
|
-
"summary": "PPTist lays elements out in a fixed pixel coordinate space, not inches.
|
|
9
|
+
"summary": "PPTist lays elements out in a fixed pixel coordinate space, not inches. Prefer built-in templates (deck.applyTemplate + slides.insertFromTemplate) so colors, contrast, fonts and layout come from the official template library instead of being hand-picked. These tokens describe the *fallback* defaults for manual placement only.",
|
|
10
10
|
"coordinateSystem": {
|
|
11
11
|
"summary": "The default 16:9 canvas is 1000 x 562.5 px (viewport.size = 1000, viewport.ratio = 0.5625). Origin (0,0) is the top-left corner. Every element has left, top, width, height in px and rotate in degrees.",
|
|
12
12
|
"notes": [
|
|
@@ -14,11 +14,12 @@
|
|
|
14
14
|
"Keep a 40px safe margin from every edge (left/top >= 40, and left+width <= 960, top+height <= 522 on the default canvas).",
|
|
15
15
|
"Coordinates are absolute px, NOT inches/points. To port an inches-based layout, multiply inches by 100 (10in wide deck -> 1000px).",
|
|
16
16
|
"rotate is clockwise degrees about the element center. Lines use start/end points instead of width/height/rotate.",
|
|
17
|
-
"
|
|
17
|
+
"When you use slides.insertFromTemplate you do NOT compute coordinates or sizes — the template slide already has designed elements. The notes above only matter for manual element placement.",
|
|
18
|
+
"For manual text, write Markdown or plain text (text.create({ markdown }) / { content } as plain text). The engine stores text as HTML internally; you should not author raw HTML tags yourself (they are escaped and show as literal text). Per-run font sizing is an advanced manual concern — reach for a layout instead."
|
|
18
19
|
]
|
|
19
20
|
},
|
|
20
21
|
"tokens": {
|
|
21
|
-
"summary": "
|
|
22
|
+
"summary": "The neutral fallback palette/type scale (px) used when no template theme is applied. PREFER deck.applyTemplate (see templates.catalog) — each built-in template ships a full theme and designed slides. Override individual tokens with deck.setTheme only when a template is not enough.",
|
|
22
23
|
"colors": {
|
|
23
24
|
"background": "#FFFFFF",
|
|
24
25
|
"primary": "#1F4E79",
|
|
@@ -47,10 +48,10 @@
|
|
|
47
48
|
"domains": [
|
|
48
49
|
{
|
|
49
50
|
"id": "deck",
|
|
50
|
-
"commandCount":
|
|
51
|
+
"commandCount": 8,
|
|
51
52
|
"title": "Deck",
|
|
52
53
|
"summary": "Whole-document state: title, theme, viewport, templates, plus full get/set/patch.",
|
|
53
|
-
"whenToUse": "
|
|
54
|
+
"whenToUse": "Apply a template theme with deck.applyTemplate up front; set the viewport once; use whole-document import/export at persistence boundaries."
|
|
54
55
|
},
|
|
55
56
|
{
|
|
56
57
|
"id": "import",
|
|
@@ -66,12 +67,19 @@
|
|
|
66
67
|
"summary": "Serializable JSON snapshot of the deck.",
|
|
67
68
|
"whenToUse": "Persist/autosave from documentChanged events."
|
|
68
69
|
},
|
|
70
|
+
{
|
|
71
|
+
"id": "templates",
|
|
72
|
+
"commandCount": 2,
|
|
73
|
+
"title": "Templates",
|
|
74
|
+
"summary": "Built-in presentation templates (template_1 … template_8 — same as the UI template picker). templates.catalog lists them; templates.slidesCatalog lists insertable slide slugs by type; deck.applyTemplate sets the deck theme.",
|
|
75
|
+
"whenToUse": "FIRST. Pick exactly one template style for the whole deck, apply its theme, then insert slides by slug. Never invent custom slide layouts when a template slide fits."
|
|
76
|
+
},
|
|
69
77
|
{
|
|
70
78
|
"id": "slides",
|
|
71
|
-
"commandCount":
|
|
79
|
+
"commandCount": 18,
|
|
72
80
|
"title": "Slides",
|
|
73
|
-
"summary": "
|
|
74
|
-
"whenToUse": "
|
|
81
|
+
"summary": "Insert slides from built-in templates (slides.insertFromTemplate); read, update, delete, duplicate, move, select; set background, transition and speaker remark.",
|
|
82
|
+
"whenToUse": "Prefer slides.insertFromTemplate (one call per slide). After insert, use text.setMarkdown on the returned element ids. Avoid slides.create for deck building."
|
|
75
83
|
},
|
|
76
84
|
{
|
|
77
85
|
"id": "elements",
|
|
@@ -91,8 +99,8 @@
|
|
|
91
99
|
"id": "text",
|
|
92
100
|
"commandCount": 11,
|
|
93
101
|
"title": "Text",
|
|
94
|
-
"summary": "Text element create/update plus content helpers.
|
|
95
|
-
"whenToUse": "
|
|
102
|
+
"summary": "Text element create/update plus content helpers. Author content as Markdown (text.create({ markdown }) / text.setMarkdown) or plain text.",
|
|
103
|
+
"whenToUse": "For manual slides only — layouts already place titles, body and captions. Pass Markdown or plain text; do NOT write raw HTML tags (they are escaped and show as literal text). The literal-HTML path (text.setContent / { content }) is reserved for intentionally rendering code-like markup."
|
|
96
104
|
},
|
|
97
105
|
{
|
|
98
106
|
"id": "lines",
|
|
@@ -106,7 +114,7 @@
|
|
|
106
114
|
"commandCount": 3,
|
|
107
115
|
"title": "Rich text",
|
|
108
116
|
"summary": "Document-model edits to a text element's prose: set content, run styles and paragraph attributes.",
|
|
109
|
-
"whenToUse": "Use when you need paragraph alignment / inline run styling
|
|
117
|
+
"whenToUse": "Use when you need paragraph alignment / inline run styling on an existing text element."
|
|
110
118
|
},
|
|
111
119
|
{
|
|
112
120
|
"id": "animations",
|
|
@@ -285,6 +293,78 @@
|
|
|
285
293
|
]
|
|
286
294
|
}
|
|
287
295
|
},
|
|
296
|
+
{
|
|
297
|
+
"name": "deck.applyTemplate",
|
|
298
|
+
"domain": "deck",
|
|
299
|
+
"payload": "{ templateId: string }",
|
|
300
|
+
"returns": "PptistApplyTemplateResult",
|
|
301
|
+
"doc": {
|
|
302
|
+
"summary": "Apply ONE built-in template theme to the whole deck (fonts, colors, background).",
|
|
303
|
+
"details": "Do this once, up front, before inserting slides. slides.insertFromTemplate also applies the theme automatically when the deck is still empty (default).",
|
|
304
|
+
"params": [
|
|
305
|
+
{
|
|
306
|
+
"name": "templateId",
|
|
307
|
+
"type": "string",
|
|
308
|
+
"required": true,
|
|
309
|
+
"description": "A built-in id from templates.catalog (e.g. 'template_1' for Crimson landscape)."
|
|
310
|
+
}
|
|
311
|
+
],
|
|
312
|
+
"examples": [
|
|
313
|
+
"await controller.deck.applyTemplate('template_1')"
|
|
314
|
+
],
|
|
315
|
+
"tips": [
|
|
316
|
+
"Keep one template style for the whole deck. Do not hand-pick colors or fonts on top of a template."
|
|
317
|
+
],
|
|
318
|
+
"related": [
|
|
319
|
+
"templates.catalog",
|
|
320
|
+
"templates.slidesCatalog",
|
|
321
|
+
"slides.insertFromTemplate"
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"name": "templates.catalog",
|
|
327
|
+
"domain": "templates",
|
|
328
|
+
"payload": "undefined",
|
|
329
|
+
"returns": "PptistTemplateSummary[]",
|
|
330
|
+
"doc": {
|
|
331
|
+
"summary": "List built-in presentation templates (template_1 … template_8) with human-readable names — the same catalog as the template picker UI.",
|
|
332
|
+
"details": "Read this first. Each entry is a full designed theme (e.g. template_1 = Crimson landscape). Pick exactly one whose tone fits the audience, then apply it with deck.applyTemplate before inserting any slides.",
|
|
333
|
+
"examples": [
|
|
334
|
+
"const templates = controller.templates.catalog() // -> [{ id:'template_1', name:'Crimson landscape', ... }, ...]"
|
|
335
|
+
],
|
|
336
|
+
"related": [
|
|
337
|
+
"deck.applyTemplate",
|
|
338
|
+
"templates.slidesCatalog"
|
|
339
|
+
]
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"name": "templates.slidesCatalog",
|
|
344
|
+
"domain": "templates",
|
|
345
|
+
"payload": "{ templateId: string }",
|
|
346
|
+
"returns": "PptistTemplateSlidesCatalogResult",
|
|
347
|
+
"doc": {
|
|
348
|
+
"summary": "List insertable slides for a template, grouped by type (cover, contents, transition, content, end) with slug + description.",
|
|
349
|
+
"details": "Call after choosing a templateId. Each slug (e.g. cover_1, content_2) maps to one designed slide in that template. Pick the slug whose description best matches the slide you need, then call slides.insertFromTemplate.",
|
|
350
|
+
"params": [
|
|
351
|
+
{
|
|
352
|
+
"name": "templateId",
|
|
353
|
+
"type": "string",
|
|
354
|
+
"required": true,
|
|
355
|
+
"description": "Built-in template id from templates.catalog."
|
|
356
|
+
}
|
|
357
|
+
],
|
|
358
|
+
"examples": [
|
|
359
|
+
"const catalog = await controller.templates.slidesCatalog('template_1')",
|
|
360
|
+
"// catalog.byType.cover -> [{ slug:'cover_1', description:'...', ... }, ...]"
|
|
361
|
+
],
|
|
362
|
+
"related": [
|
|
363
|
+
"slides.insertFromTemplate",
|
|
364
|
+
"templates.catalog"
|
|
365
|
+
]
|
|
366
|
+
}
|
|
367
|
+
},
|
|
288
368
|
{
|
|
289
369
|
"name": "deck.setViewport",
|
|
290
370
|
"domain": "deck",
|
|
@@ -378,6 +458,61 @@
|
|
|
378
458
|
]
|
|
379
459
|
}
|
|
380
460
|
},
|
|
461
|
+
{
|
|
462
|
+
"name": "slides.insertFromTemplate",
|
|
463
|
+
"domain": "slides",
|
|
464
|
+
"payload": "PptistInsertFromTemplateInput",
|
|
465
|
+
"returns": "PptistInsertFromTemplateResult",
|
|
466
|
+
"doc": {
|
|
467
|
+
"summary": "Insert a designed slide from a built-in template by slug. The PREFERRED way to add a slide.",
|
|
468
|
+
"details": "Clones the template slide (layout, decor, placeholder text boxes) into the deck. You do NOT pick coordinates or sizes. After insert, fill placeholders with text.setMarkdown on the returned elementIds. Do not use slides.create for normal deck building.",
|
|
469
|
+
"params": [
|
|
470
|
+
{
|
|
471
|
+
"name": "templateId",
|
|
472
|
+
"type": "string",
|
|
473
|
+
"required": true,
|
|
474
|
+
"description": "Built-in template id (same as deck.applyTemplate)."
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
"name": "slug",
|
|
478
|
+
"type": "string",
|
|
479
|
+
"required": true,
|
|
480
|
+
"description": "Slide slug from templates.slidesCatalog (e.g. 'cover_1', 'contents_1', 'content_3')."
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"name": "index",
|
|
484
|
+
"type": "number",
|
|
485
|
+
"required": false,
|
|
486
|
+
"description": "Insert position; appends when omitted."
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"name": "select",
|
|
490
|
+
"type": "boolean",
|
|
491
|
+
"required": false,
|
|
492
|
+
"description": "Select the new slide after insert (default true)."
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"name": "applyTemplateTheme",
|
|
496
|
+
"type": "boolean",
|
|
497
|
+
"required": false,
|
|
498
|
+
"description": "Apply template theme when deck is empty (default true)."
|
|
499
|
+
}
|
|
500
|
+
],
|
|
501
|
+
"examples": [
|
|
502
|
+
"await controller.slides.insertFromTemplate({ templateId:'template_1', slug:'cover_1' })",
|
|
503
|
+
"await controller.slides.insertFromTemplate({ templateId:'template_1', slug:'content_2', index:2 })"
|
|
504
|
+
],
|
|
505
|
+
"tips": [
|
|
506
|
+
"Plan slide flow: cover → contents → content slides → end. Match slug descriptions from slidesCatalog.",
|
|
507
|
+
"After insert, batch text.setMarkdown calls for each placeholder element id returned."
|
|
508
|
+
],
|
|
509
|
+
"related": [
|
|
510
|
+
"templates.slidesCatalog",
|
|
511
|
+
"deck.applyTemplate",
|
|
512
|
+
"text.setMarkdown"
|
|
513
|
+
]
|
|
514
|
+
}
|
|
515
|
+
},
|
|
381
516
|
{
|
|
382
517
|
"name": "slides.insert",
|
|
383
518
|
"domain": "slides",
|
|
@@ -498,8 +633,8 @@
|
|
|
498
633
|
"payload": "{ slideId?: string; index?: number; element: Partial<PPTElement> & { type: PPTElement['type'] }; select?: boolean }",
|
|
499
634
|
"returns": "PPTElement",
|
|
500
635
|
"doc": {
|
|
501
|
-
"summary": "Create any element type on a slide. payload.element.type is required.",
|
|
502
|
-
"details": "Generic creator across all element types
|
|
636
|
+
"summary": "Create any element type on a slide (manual placement). payload.element.type is required.",
|
|
637
|
+
"details": "Generic creator across all element types, for bespoke slides a template can't express. Prefer slides.insertFromTemplate for whole slides, or the typed creators (text.create, shapes.create, charts.create, tables.create) for single elements. Provide left/top/width/height in canvas px and rotate in degrees. For text, pass Markdown via text.create instead of hand-writing HTML here.",
|
|
503
638
|
"params": [
|
|
504
639
|
{
|
|
505
640
|
"name": "slideId",
|
|
@@ -751,8 +886,8 @@
|
|
|
751
886
|
"payload": "PptistCreateTextInput | undefined",
|
|
752
887
|
"returns": "PPTTextElement",
|
|
753
888
|
"doc": {
|
|
754
|
-
"summary": "Create a text element
|
|
755
|
-
"details": "
|
|
889
|
+
"summary": "Create a text element (manual placement). Author content as Markdown via `markdown` (recommended) or plain text via `content`.",
|
|
890
|
+
"details": "Pass `markdown` for formatted copy (the bridge converts it to the HTML PPTist stores). `content` is treated as literal markup — pass plain text there, or intentional HTML only when you specifically want to render markup (e.g. a code snippet). Do NOT type raw HTML tags into `markdown`: they are escaped and appear as literal text (the bridge warns when it detects this). The fallback color/font come from defaultColor/defaultFontName.",
|
|
756
891
|
"params": [
|
|
757
892
|
{
|
|
758
893
|
"name": "slideId",
|
|
@@ -761,16 +896,16 @@
|
|
|
761
896
|
"description": "Target slide."
|
|
762
897
|
},
|
|
763
898
|
{
|
|
764
|
-
"name": "
|
|
899
|
+
"name": "markdown",
|
|
765
900
|
"type": "string",
|
|
766
901
|
"required": false,
|
|
767
|
-
"description": "
|
|
902
|
+
"description": "Markdown content (recommended). Converted to HTML."
|
|
768
903
|
},
|
|
769
904
|
{
|
|
770
|
-
"name": "
|
|
905
|
+
"name": "content",
|
|
771
906
|
"type": "string",
|
|
772
907
|
"required": false,
|
|
773
|
-
"description": "
|
|
908
|
+
"description": "Literal content (plain text, or intentional HTML for code-like markup). Wins over markdown."
|
|
774
909
|
},
|
|
775
910
|
{
|
|
776
911
|
"name": "element",
|
|
@@ -781,16 +916,16 @@
|
|
|
781
916
|
],
|
|
782
917
|
"examples": [
|
|
783
918
|
"controller.text.create({ slideId, markdown: '**Key finding:** treated group improved 18%', element: { left:520, top:130, width:440, height:300, rotate:0, defaultColor:'#2D2D2D' } })",
|
|
784
|
-
"controller.text.create({ slideId,
|
|
919
|
+
"controller.text.create({ slideId, markdown: '- First point\\n- Second point\\n- Third point', element:{ left:40, top:140, width:920, height:300, rotate:0 } })"
|
|
785
920
|
],
|
|
786
921
|
"tips": [
|
|
787
|
-
"
|
|
922
|
+
"Prefer slides.insertFromTemplate for whole slides. Markdown flavor: markdown-it + markdown-it-texmath (KaTeX). Write Markdown, not HTML."
|
|
788
923
|
],
|
|
789
924
|
"related": [
|
|
790
925
|
"text.setMarkdown",
|
|
791
926
|
"text.setContent",
|
|
792
927
|
"richText.setContent",
|
|
793
|
-
"
|
|
928
|
+
"slides.insertFromTemplate"
|
|
794
929
|
]
|
|
795
930
|
}
|
|
796
931
|
},
|
|
@@ -818,7 +953,8 @@
|
|
|
818
953
|
"payload": "{ elementId: string; slideId?: string; content: string }",
|
|
819
954
|
"returns": "PPTTextElement",
|
|
820
955
|
"doc": {
|
|
821
|
-
"summary": "Replace a text element's
|
|
956
|
+
"summary": "Replace a text element's content with a literal string (the literal-markup path).",
|
|
957
|
+
"details": "Use for plain text, or for intentionally rendering HTML markup (e.g. a code snippet). For normal formatted copy use text.setMarkdown instead.",
|
|
822
958
|
"related": [
|
|
823
959
|
"text.setMarkdown",
|
|
824
960
|
"richText.setContent"
|
|
@@ -832,6 +968,7 @@
|
|
|
832
968
|
"returns": "PPTTextElement",
|
|
833
969
|
"doc": {
|
|
834
970
|
"summary": "Replace a text element's content from a Markdown string (converted to HTML).",
|
|
971
|
+
"details": "Author in Markdown. Raw HTML tags are escaped (they would render as literal text) and trigger a warning — use Markdown syntax instead.",
|
|
835
972
|
"examples": [
|
|
836
973
|
"controller.text.setMarkdown(elementId, '- First point\\n- Second point\\n- Third point')"
|
|
837
974
|
],
|
|
@@ -1489,17 +1626,43 @@
|
|
|
1489
1626
|
}
|
|
1490
1627
|
],
|
|
1491
1628
|
"guides": [
|
|
1629
|
+
{
|
|
1630
|
+
"id": "templates-flow",
|
|
1631
|
+
"title": "How to build a deck (built-in templates)",
|
|
1632
|
+
"summary": "The recommended flow: pick one template style, apply its theme, insert slides by slug, then edit text.",
|
|
1633
|
+
"body": [
|
|
1634
|
+
"1. Read templates.catalog and pick exactly ONE template (template_1 … template_8) whose tone fits the audience (e.g. template_1 Crimson landscape for bold keynotes, template_5 Minimal green for crisp lessons).",
|
|
1635
|
+
"2. Apply it once: deck.applyTemplate({ templateId:'template_1' }). This sets the deck theme. Do not hand-pick colors or fonts after this.",
|
|
1636
|
+
"3. Read templates.slidesCatalog({ templateId }) — slides are grouped by type: cover, contents, transition, content, end. Each entry has a slug and description.",
|
|
1637
|
+
"4. For each slide in your outline, call slides.insertFromTemplate({ templateId, slug }) with the slug that best matches (e.g. cover_1 for title, contents_1 for agenda, content_2 for a text+image slide).",
|
|
1638
|
+
"5. Use the returned elementIds: batch text.setMarkdown (or text.update) to replace placeholder copy. Author Markdown/plain text only — never HTML.",
|
|
1639
|
+
"6. After creating or editing a slide, look at the auto-screenshot. Fix overflow and literal markup before moving on.",
|
|
1640
|
+
"7. Only use slides.create + manual elements when no template slide in the catalog fits."
|
|
1641
|
+
]
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
"id": "content-authoring",
|
|
1645
|
+
"title": "Authoring content (Markdown / plain text / structured data — not HTML)",
|
|
1646
|
+
"summary": "What to put in text and layout slots, and why raw HTML does not belong there.",
|
|
1647
|
+
"body": [
|
|
1648
|
+
"Layout slots and the markdown text path accept Markdown, plain text, or structured values (arrays for bullets; { labels, series } for charts; rows for comparison). The engine renders them into clean, themed HTML for you.",
|
|
1649
|
+
"Do NOT write raw HTML tags (<div>, <span style>, <br>, <b>, ...) into Markdown/plain-text inputs. They are ESCAPED and appear as literal angle-bracket text on the slide. The bridge attaches a warning when it detects this — treat that warning as a must-fix.",
|
|
1650
|
+
"Use Markdown syntax for emphasis: **bold**, _italic_, `code`, and - / 1. for lists. Math uses $...$ / $$...$$ (KaTeX).",
|
|
1651
|
+
"The only place literal HTML is appropriate is the explicit literal path (text.setContent / element.content) when you intentionally want to render markup — for example, displaying an HTML code snippet as content. Even then, prefer a fenced code block in Markdown when you just want code to look like code.",
|
|
1652
|
+
"If a screenshot shows literal tags or markup characters on a slide, you used the wrong path: re-author the text as Markdown via text.setMarkdown."
|
|
1653
|
+
]
|
|
1654
|
+
},
|
|
1492
1655
|
{
|
|
1493
1656
|
"id": "getting-started",
|
|
1494
|
-
"title": "
|
|
1495
|
-
"summary": "
|
|
1657
|
+
"title": "Manual placement (fallback)",
|
|
1658
|
+
"summary": "For bespoke slides a layout can't express: the read -> style -> per-slide batch -> review loop.",
|
|
1496
1659
|
"body": [
|
|
1497
|
-
"
|
|
1498
|
-
"
|
|
1499
|
-
"
|
|
1500
|
-
"
|
|
1501
|
-
"
|
|
1502
|
-
"
|
|
1660
|
+
"Prefer built-in templates (see the templates-flow guide). Use manual placement only when no template slide fits.",
|
|
1661
|
+
"1. Read the current deck (controller.export.json() or deck.get) and apply a template theme (deck.applyTemplate) so element defaults inherit a coherent palette and font.",
|
|
1662
|
+
"2. For each slide: create the slide, capture result.data.id, then add its elements in a single executeBatch so the slide is one undo step.",
|
|
1663
|
+
"3. Place elements in canvas px (default 1000 x 562.5). Keep a 40px margin and a clear visual hierarchy: title row, content area, footer/citation.",
|
|
1664
|
+
"4. Author body text in Markdown (text.create({ markdown }) / text.setMarkdown), never raw HTML.",
|
|
1665
|
+
"5. Screenshot the slide and fix overflow/contrast/alignment before moving on. Use meta.dryRun to validate a risky payload before applying it."
|
|
1503
1666
|
]
|
|
1504
1667
|
},
|
|
1505
1668
|
{
|
|
@@ -1630,6 +1793,7 @@
|
|
|
1630
1793
|
"PptistAnimationPreset": "export interface PptistAnimationPreset { name: string; value: string }",
|
|
1631
1794
|
"PptistAnimationPresetGroup": "export interface PptistAnimationPresetGroup { type: string; name: string; children: PptistAnimationPreset[] }",
|
|
1632
1795
|
"PptistAnimationSequenceStep": "export interface PptistAnimationSequenceStep { index: number; animations: PPTAnimation[]; autoNext: boolean }",
|
|
1796
|
+
"PptistApplyTemplateResult": "export interface PptistApplyTemplateResult { templateId: string; theme: SlideTheme }",
|
|
1633
1797
|
"PptistAudioElementPatch": "export type PptistAudioElementPatch = Partial<Pick<PPTAudioElement, 'src' | 'ext' | 'autoplay' | 'loop' | 'color' | 'fixedRatio' | 'link' | 'name' | 'lock' | 'groupId'>> & { transform?: PptistAudioTransformPatch }",
|
|
1634
1798
|
"PptistAudioSourceInput": "export type PptistAudioSourceInput = PptistMediaAssetInput",
|
|
1635
1799
|
"PptistAudioTransformPatch": "export type PptistAudioTransformPatch = Pick<PptistElementTransformPatch, 'left' | 'top' | 'width' | 'height' | 'rotate'>",
|
|
@@ -1656,6 +1820,8 @@
|
|
|
1656
1820
|
"PptistIdRemap": "export interface PptistIdRemap { slideIds: PptistIdMap; elementIds: PptistIdMap; groupIds: PptistIdMap; animationIds: PptistIdMap }",
|
|
1657
1821
|
"PptistInsertElementsInput": "export interface PptistInsertElementsInput { slideId?: string; index?: number; elements: PPTElement | PPTElement[]; animations?: PPTAnimation[]; offset?: number | { left?: number; top?: number }; select?: boolean; preserveExternalSlideLinks?: boolean; slideIdMap?: PptistIdMap }",
|
|
1658
1822
|
"PptistInsertElementsResult": "export interface PptistInsertElementsResult { slideId: string; elements: PPTElement[]; animations: PPTAnimation[]; remap: Omit<PptistIdRemap, 'slideIds'> & { slideIds?: PptistIdMap } }",
|
|
1823
|
+
"PptistInsertFromTemplateInput": "export interface PptistInsertFromTemplateInput { templateId: string; slug: string; index?: number; select?: boolean; applyTemplateTheme?: boolean }",
|
|
1824
|
+
"PptistInsertFromTemplateResult": "export interface PptistInsertFromTemplateResult { slideId: string; templateId: string; slug: string; elementIds: string[] }",
|
|
1659
1825
|
"PptistInsertSlidesInput": "export interface PptistInsertSlidesInput { slides: Slide | Slide[]; index?: number; select?: boolean; preserveExternalSlideLinks?: boolean }",
|
|
1660
1826
|
"PptistInsertSlidesResult": "export interface PptistInsertSlidesResult { slides: Slide[]; remap: PptistIdRemap }",
|
|
1661
1827
|
"PptistJsonPrimitive": "export type PptistJsonPrimitive = string | number | boolean | null",
|
|
@@ -1687,6 +1853,10 @@
|
|
|
1687
1853
|
"PptistSlideThemePatch": "export type PptistSlideThemePatch = Omit<Partial<SlideTheme>, 'outline' | 'shadow'> & { outline?: Partial<SlideTheme['outline']>; shadow?: Partial<SlideTheme['shadow']> }",
|
|
1688
1854
|
"PptistSlideTransition": "export interface PptistSlideTransition { slideId: string; turningMode?: TurningMode }",
|
|
1689
1855
|
"PptistTableElementPatch": "export type PptistTableElementPatch = Partial<Omit<PPTTableElement, 'type' | 'id' | 'outline' | 'theme'>> & { outline?: Partial<PPTTableElement['outline']>; theme?: Partial<NonNullable<PPTTableElement['theme']>> }",
|
|
1856
|
+
"PptistTemplateSlideEntry": "export interface PptistTemplateSlideEntry { slug: string; type: SlideType; description: string; elementCount: number }",
|
|
1857
|
+
"PptistTemplateSlidesCatalog": "export type PptistTemplateSlidesCatalog = Record<SlideType, PptistTemplateSlideEntry[]>",
|
|
1858
|
+
"PptistTemplateSlidesCatalogResult": "export interface PptistTemplateSlidesCatalogResult { templateId: string; templateName: string; slideCount: number; byType: PptistTemplateSlidesCatalog }",
|
|
1859
|
+
"PptistTemplateSummary": "export interface PptistTemplateSummary { id: BuiltInTemplateId | string; name: string; cover: string; origin?: string }",
|
|
1690
1860
|
"PptistVideoPatch": "export type PptistVideoPatch = PptistVideoPlaybackPatch & PptistVideoSizePatch & PptistVideoPositionPatch & PptistVideoStylePatch",
|
|
1691
1861
|
"PptistVideoPlaybackPatch": "export interface PptistVideoPlaybackPatch { src?: string; ext?: string; autoplay?: boolean; poster?: string }",
|
|
1692
1862
|
"PptistVideoPositionPatch": "export interface PptistVideoPositionPatch { left?: number; top?: number; rotate?: number }",
|
|
@@ -1739,7 +1909,7 @@
|
|
|
1739
1909
|
"SlideBackgroundImageSize": "export type SlideBackgroundImageSize = 'cover' | 'contain' | 'repeat'",
|
|
1740
1910
|
"SlideBackgroundType": "export type SlideBackgroundType = 'solid' | 'image' | 'gradient'",
|
|
1741
1911
|
"SlideTemplate": "export interface SlideTemplate { name: string; id: string; cover: string; origin?: string }",
|
|
1742
|
-
"SlideTheme": "export interface SlideTheme { backgroundColor: string; themeColors: string[]; fontColor: string; fontName: string; outline: PPTElementOutline; shadow: PPTElementShadow }",
|
|
1912
|
+
"SlideTheme": "export interface SlideTheme { backgroundColor: string; themeColors: string[]; fontColor: string; fontName: string; outline: PPTElementOutline; shadow: PPTElementShadow; styleId?: string }",
|
|
1743
1913
|
"SlideType": "export type SlideType = 'cover' | 'contents' | 'transition' | 'content' | 'end'",
|
|
1744
1914
|
"TableCell": "export interface TableCell { id: string; colspan: number; rowspan: number; text: string; style?: TableCellStyle }",
|
|
1745
1915
|
"TableCellStyle": "export interface TableCellStyle { bold?: boolean; em?: boolean; underline?: boolean; strikethrough?: boolean; color?: string; backcolor?: string; fontsize?: string; fontname?: string; align?: TextAlign; vAlign?: TextAlignVertical }",
|