@lofcz/pptist 2.0.16 → 2.0.18
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/README.md +14 -7
- package/dist/embed/agentic-manifest.json +12 -8
- package/dist/embed/pptist-embed.css +1 -1
- package/dist/embed/pptist-embed.js +21387 -20106
- package/dist/types/configs/exportTabs.d.ts +11 -0
- package/dist/types/embed/agentic/layouts.d.ts +1 -1
- package/dist/types/embed/agentic/types.d.ts +2 -0
- package/dist/types/embed/index.d.ts +1 -0
- package/dist/types/embed/types.d.ts +6 -0
- package/dist/types/hooks/useExport.d.ts +1 -1
- package/dist/types/i18n/i18n-types.d.ts +82 -2
- package/dist/types/utils/emitter.d.ts +7 -0
- package/dist/types/utils/markdown.d.ts +34 -3
- package/dist/types/views/Editor/CanvasTool/SVGPathEditor.vue.d.ts +9 -0
- package/dist/types/views/components/element/TableElement/EditableTable.vue.d.ts +1 -0
- package/docs/EMBED.md +18 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -214,6 +214,7 @@ If you wish to use this project for commercial gain, I hope you will respect ope
|
|
|
214
214
|
|
|
215
215
|
|
|
216
216
|
# 🧮 商业用途
|
|
217
|
+
## 商用须知
|
|
217
218
|
- 本项目禁止闭源商用,如果你希望将其用于商业项目,请尊重开源,**严格遵循 [AGPL-3.0 协议](https://www.gnu.org/licenses/agpl-3.0.html)**,回馈开源社区;
|
|
218
219
|
- 如果你因为任何原因,无法执行 AGPL-3.0 协议,可以选择:
|
|
219
220
|
1. 使用 Apache 2.0 协议版本(最后更新时间为2022年5月,已停止维护,[点此下载](https://github.com/pipipi-pikachu/PPTist/archive/f1a35bb8e045124e37dcafd6acbf40b4531b69aa.zip));
|
|
@@ -244,11 +245,9 @@ If you wish to use this project for commercial gain, I hope you will respect ope
|
|
|
244
245
|
- 作者倡导异步沟通(正式、信息整合度高),**不加私人微信/QQ/手机号等**,有任何授权相关疑问请邮件联系,谢谢理解;
|
|
245
246
|
- 提需求/报bug/询问技术方案等非授权相关咨询,请在 [Issues](https://github.com/pipipi-pikachu/PPTist/issues) 中进行。
|
|
246
247
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
协议的核心要求用通俗的语言解释如下:
|
|
251
|
-
- **开源义务**:如果你用了 AGPL 的代码,无论你或你的下游怎么使用/修改,都必须把你最终的代码全部完整公开出来(不只是给出修改的部分,也不是说换个框架重写一遍就能和原始代码脱离关系了),并继续以 AGPL 协议开源(强调:必须延续 AGPL 协议,保持开源的传染性,不能更换其他协议)。
|
|
248
|
+
## AGPL-3.0 协议
|
|
249
|
+
协议核心要求用通俗的语言解释如下:
|
|
250
|
+
- **开源义务**:如果你用了 AGPL 的代码,无论你或你的下游怎么使用/修改,都必须把你最终的代码全部完整公开出来,并继续以 AGPL 协议开源(强调:必须延续 AGPL 协议,保持开源的传染性,不能更换其他协议)。
|
|
252
251
|
- **网络服务也要开源**:即使你只是用 AGPL 的代码做了一个网站或网络服务,别人通过网络用你的服务时,你也需要遵守上一条**开源义务**。
|
|
253
252
|
- **保留版权声明**:你不能删掉代码里原来的作者信息和许可证声明,得告诉大家这代码是从哪儿来的。
|
|
254
253
|
- **不能加额外限制**:你不能在衍生出来的 AGPL 代码上加一些限制,比如不让别人再分发代码,或者要求别人付费才能使用代码(包括但不限于:要求别人购买授权/服务/产品等)。
|
|
@@ -256,5 +255,13 @@ If you wish to use this project for commercial gain, I hope you will respect ope
|
|
|
256
255
|
|
|
257
256
|
> 详细协议内容见官方文档:[AGPL-3.0 协议](https://www.gnu.org/licenses/agpl-3.0.html)
|
|
258
257
|
|
|
259
|
-
|
|
260
|
-
|
|
258
|
+
|
|
259
|
+
# ⭐ Star History
|
|
260
|
+
|
|
261
|
+
<a href="https://www.star-history.com/?repos=pipipi-pikachu%2FPPTist&type=date&legend=top-left">
|
|
262
|
+
<picture>
|
|
263
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=pipipi-pikachu/PPTist&type=date&theme=dark&legend=top-left" />
|
|
264
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=pipipi-pikachu/PPTist&type=date&legend=top-left" />
|
|
265
|
+
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=pipipi-pikachu/PPTist&type=date&legend=top-left" />
|
|
266
|
+
</picture>
|
|
267
|
+
</a>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@lofcz/pptist",
|
|
4
|
-
"packageVersion": "2.0.
|
|
5
|
-
"generatedAt": "2026-06-
|
|
4
|
+
"packageVersion": "2.0.18",
|
|
5
|
+
"generatedAt": "2026-06-19T14:08:21.973Z",
|
|
6
6
|
"summary": "Authoring guidance for the PPTist agentic bridge. The recommended way to build a deck from scratch: (1) pick ONE visual identity with styles.catalog -> deck.applyStyle (academic | minimal | bold | playful), then (2) for each slide pick a recipe from layouts.catalog and add it with slides.createFromLayout({ layoutId, slots }) — the engine themes, positions AND auto-fits every text box (via responsive measurement) so content never overflows. Author slot content as Markdown/plain text or structured values (arrays for bullets, { labels, series } for charts) — never hand-written HTML. Alternative: for pixel-perfect branded decks, use the built-in templates flow (deck.applyTemplate + slides.insertFromTemplate). Avoid blank slides.create / hand-placed elements unless neither a layout nor a template slide fits. Pair this with the machine schema (command payload/return types) in the same manifest.",
|
|
7
7
|
"commandCount": 177,
|
|
8
8
|
"designSystem": {
|
|
@@ -85,8 +85,8 @@
|
|
|
85
85
|
"id": "layouts",
|
|
86
86
|
"commandCount": 1,
|
|
87
87
|
"title": "Layouts",
|
|
88
|
-
"summary": "Compositional slide recipes (title, section, closing, bullets, twoColumn, imageText, bigStat, quote, chart, comparison). layouts.catalog lists each layout's content slots and what they expect; slides.createFromLayout builds a themed, positioned slide from a layout id + slots.",
|
|
89
|
-
"whenToUse": "After deck.applyStyle, once per slide. Pick the layout whose composition matches the slide's job and fill its slots with content. The engine themes, positions and auto-fits text to each box, so focus on clear, concise content rather than exact character counts."
|
|
88
|
+
"summary": "Compositional slide recipes (title, section, closing, bullets, twoColumn, imageText, imageFull, bigStat, quote, chart, comparison, cards, numbered). layouts.catalog lists each layout's content slots and what they expect; slides.createFromLayout builds a themed, positioned slide from a layout id + slots.",
|
|
89
|
+
"whenToUse": "After deck.applyStyle, once per slide. Pick the layout whose composition matches the slide's job and fill its slots with content — and VARY it across the deck (cards for parallel items, numbered for ordered steps, bigStat/chart for data, quote/imageFull for impact) rather than defaulting to bullets every time. The engine themes, positions and auto-fits text to each box, so focus on clear, concise content rather than exact character counts."
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
"id": "slides",
|
|
@@ -106,8 +106,8 @@
|
|
|
106
106
|
"id": "latex",
|
|
107
107
|
"commandCount": 3,
|
|
108
108
|
"title": "LaTeX",
|
|
109
|
-
"summary": "
|
|
110
|
-
"whenToUse": "
|
|
109
|
+
"summary": "Standalone formula ELEMENTS rendered from LaTeX (a display equation that occupies its own block).",
|
|
110
|
+
"whenToUse": "Only for a big display equation that stands on its own line. For inline math inside a sentence, bullet, heading or any layout slot, write $…$ in the Markdown/slot text instead (it typesets via KaTeX) — do NOT add a separate latex element for math embedded in prose."
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"id": "text",
|
|
@@ -580,10 +580,14 @@
|
|
|
580
580
|
"examples": [
|
|
581
581
|
"await controller.slides.createFromLayout({ layoutId:'title', slots:{ title:'Quarterly Review', subtitle:'Results and outlook', eyebrow:'2026 Q1' } })",
|
|
582
582
|
"await controller.slides.createFromLayout({ layoutId:'bullets', slots:{ title:'Key points', bullets:['First point','Second point','Third point'] } })",
|
|
583
|
+
"await controller.slides.createFromLayout({ layoutId:'cards', slots:{ title:'Three pillars', cards:[{ heading:'Speed', body:'Sub-second responses' },{ heading:'Scale', body:'Millions of users' },{ heading:'Safety', body:'Private by default' }] } })",
|
|
584
|
+
"await controller.slides.createFromLayout({ layoutId:'numbered', slots:{ title:'How it works', steps:[{ heading:'Collect', body:'Gather the inputs' },{ heading:'Process', body:'Run the model' },{ heading:'Deliver', body:'Return the result' }] } })",
|
|
585
|
+
"await controller.slides.createFromLayout({ layoutId:'imageFull', slots:{ image:'https://…/photo.jpg', title:'The coastline at dawn', subtitle:'Field site, 2026' } })",
|
|
583
586
|
"await controller.slides.createFromLayout({ layoutId:'chart', slots:{ title:'Revenue by region', chartType:'column', labels:['North','South','East'], series:[[12,28,41]] } })"
|
|
584
587
|
],
|
|
585
588
|
"tips": [
|
|
586
589
|
"Apply a style once with deck.applyStyle before the first createFromLayout call.",
|
|
590
|
+
"VARY the layout to match the content: 'cards' for parallel items, 'numbered' for ordered steps, 'bigStat'/'chart' for data, 'quote'/'imageFull' for impact. A deck where every slide is 'bullets' is the look to avoid.",
|
|
587
591
|
"Keep slot copy concise so the auto-fit keeps text at a comfortable size; after each slide, read the auto-screenshot to confirm the result.",
|
|
588
592
|
"Use 'title' for the first slide and 'closing' for the last; 'section' to divide a long deck."
|
|
589
593
|
],
|
|
@@ -1954,7 +1958,7 @@
|
|
|
1954
1958
|
"PptistCreateAudioInput": "export interface PptistCreateAudioInput extends PptistAudioElementPatch { id?: string; source?: PptistAudioSourceInput; slideId?: string; index?: number; select?: boolean }",
|
|
1955
1959
|
"PptistCreateChartInput": "export type PptistCreateChartInput = PptistChartElementPatch & Partial<Pick<PPTChartElement, 'id' | 'left' | 'top' | 'width' | 'height' | 'rotate'>> & { slideId?: string; index?: number; select?: boolean }",
|
|
1956
1960
|
"PptistCreateFromLayoutInput": "export interface PptistCreateFromLayoutInput { layoutId: string; slots?: Record<string, unknown>; index?: number; select?: boolean; backgroundMode?: PptistLayoutBackgroundMode }",
|
|
1957
|
-
"PptistCreateFromLayoutResult": "export interface PptistCreateFromLayoutResult { slideId: string; layoutId: string; elementIds: string[]; textElementIds: string[] }",
|
|
1961
|
+
"PptistCreateFromLayoutResult": "export interface PptistCreateFromLayoutResult { slideId: string; layoutId: string; replacedStarter?: boolean; elementIds: string[]; textElementIds: string[] }",
|
|
1958
1962
|
"PptistCreateLatexElementInput": "export interface PptistCreateLatexElementInput { slideId?: string; index?: number; element: PptistLatexElementInput; select?: boolean }",
|
|
1959
1963
|
"PptistCreateLineElementInput": "export interface PptistCreateLineElementInput { slideId?: string; index?: number; element: PptistLineElementInput; select?: boolean }",
|
|
1960
1964
|
"PptistCreateTableInput": "export type PptistCreateTableInput = PptistTableElementPatch & { id?: string; slideId?: string; index?: number; select?: boolean; element?: Partial<PPTTableElement> }",
|
|
@@ -1985,7 +1989,7 @@
|
|
|
1985
1989
|
"PptistLatexElementSizing": "export interface PptistLatexElementSizing { left?: number; top?: number; width?: number; height?: number; rotate?: number }",
|
|
1986
1990
|
"PptistLayout": "export interface PptistLayout { id: string; label: string; summary: string; bestFor: string; feature: boolean; slots: PptistLayoutSlotDef[] }",
|
|
1987
1991
|
"PptistLayoutBackgroundMode": "export type PptistLayoutBackgroundMode = 'auto' | 'feature' | 'plain'",
|
|
1988
|
-
"PptistLayoutSlotDef": "export interface PptistLayoutSlotDef { name: string; type: 'text' | 'bullets' | 'image' | 'chart' | 'stats' | 'rows'; required: boolean; description: string }",
|
|
1992
|
+
"PptistLayoutSlotDef": "export interface PptistLayoutSlotDef { name: string; type: 'text' | 'bullets' | 'image' | 'chart' | 'stats' | 'rows' | 'cards' | 'steps'; required: boolean; description: string }",
|
|
1989
1993
|
"PptistLineDirectionInput": "export type PptistLineDirectionInput = Broken2LineDirection | 'auto'",
|
|
1990
1994
|
"PptistLineElementInput": "export type PptistLineElementInput = Partial<Pick<PPTLineElement, 'id' | 'left' | 'top' | 'width' | 'style' | 'color' | 'points' | 'shadow' | 'broken' | 'broken2' | 'broken2Direction' | 'curve' | 'cubic' | 'link' | 'name' | 'lock' | 'groupId'>> & Pick<PPTLineElement, 'start' | 'end'>",
|
|
1991
1995
|
"PptistLineElementPatch": "export type PptistLineElementPatch = Partial<Pick<PPTLineElement, 'left' | 'top' | 'width' | 'start' | 'end' | 'style' | 'color' | 'points' | 'shadow' | 'broken' | 'broken2' | 'broken2Direction' | 'curve' | 'cubic' | 'link' | 'name' | 'lock' | 'groupId'>>",
|