@shbernal/ts-pptx 4.0.1 → 4.1.0

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 (95) hide show
  1. package/README.md +147 -114
  2. package/dist/{autopage-odPz7zZO.js → autopage-D4kyVp11.js} +5 -5
  3. package/dist/{autopage-odPz7zZO.js.map → autopage-D4kyVp11.js.map} +1 -1
  4. package/dist/{body-insets-Dw_BeWD_.js → body-insets-kVHmjGc6.js} +2 -2
  5. package/dist/{body-insets-Dw_BeWD_.js.map → body-insets-kVHmjGc6.js.map} +1 -1
  6. package/dist/browser.d.ts +7 -7
  7. package/dist/browser.js +5 -5
  8. package/dist/{clip-Bl01BPcN.d.ts → clip-DHDlnHUq.d.ts} +2 -2
  9. package/dist/{clip-Bl01BPcN.d.ts.map → clip-DHDlnHUq.d.ts.map} +1 -1
  10. package/dist/{diagnostics-D8ot4Ei7.d.ts → diagnostics-DiMmBU8P.d.ts} +6 -6
  11. package/dist/{diagnostics-D8ot4Ei7.d.ts.map → diagnostics-DiMmBU8P.d.ts.map} +1 -1
  12. package/dist/{embedded-fonts-DarT9aoa.d.ts → embedded-fonts-CI_YGW2d.d.ts} +2 -2
  13. package/dist/{embedded-fonts-DarT9aoa.d.ts.map → embedded-fonts-CI_YGW2d.d.ts.map} +1 -1
  14. package/dist/{entry-compose-DCnvBZz2.d.ts → entry-compose-6hF9aTmT.d.ts} +19 -17
  15. package/dist/{entry-compose-DCnvBZz2.d.ts.map → entry-compose-6hF9aTmT.d.ts.map} +1 -1
  16. package/dist/{enums-BUKTUB6V.d.ts → enums-DQRpVOLh.d.ts} +3 -3
  17. package/dist/{enums-BUKTUB6V.d.ts.map → enums-DQRpVOLh.d.ts.map} +1 -1
  18. package/dist/{errors-C4oENPcu.js → errors-Da2nXCJm.js} +6 -6
  19. package/dist/{errors-C4oENPcu.js.map → errors-Da2nXCJm.js.map} +1 -1
  20. package/dist/families.d.ts +6 -6
  21. package/dist/families.js +2 -2
  22. package/dist/{fit-Cb7naFj6.js → fit-CcXbg__l.js} +10 -10
  23. package/dist/{fit-Cb7naFj6.js.map → fit-CcXbg__l.js.map} +1 -1
  24. package/dist/{font-metrics-v5fn7s7e.d.ts → font-metrics-CBGmhLo0.d.ts} +6 -6
  25. package/dist/{font-metrics-v5fn7s7e.d.ts.map → font-metrics-CBGmhLo0.d.ts.map} +1 -1
  26. package/dist/{grid-DikTjFey.js → grid-9B2w5EaY.js} +2 -2
  27. package/dist/{grid-DikTjFey.js.map → grid-9B2w5EaY.js.map} +1 -1
  28. package/dist/{html-dom-Iuog2wdK.js → html-dom-DvJmuHt2.js} +10 -10
  29. package/dist/html-dom-DvJmuHt2.js.map +1 -0
  30. package/dist/html.d.ts +3 -3
  31. package/dist/html.js +2 -2
  32. package/dist/{image-size-CvN2iCA4.js → image-size-DwDbakcl.js} +64 -5
  33. package/dist/image-size-DwDbakcl.js.map +1 -0
  34. package/dist/index.d.ts +7 -7
  35. package/dist/index.js +3 -3
  36. package/dist/inspect.d.ts +4 -4
  37. package/dist/inspect.js +4 -4
  38. package/dist/inspect.js.map +1 -1
  39. package/dist/math.d.ts +1 -1
  40. package/dist/math.js +1 -1
  41. package/dist/measure.d.ts +3 -3
  42. package/dist/measure.js +2 -2
  43. package/dist/node.d.ts +7 -7
  44. package/dist/node.js +3 -3
  45. package/dist/{notes-Dh12JAbn.js → notes-BcT571R4.js} +19 -18
  46. package/dist/notes-BcT571R4.js.map +1 -0
  47. package/dist/options-internal-WqgMf720.js.map +1 -1
  48. package/dist/{package-J49Ck6S2.d.ts → package-KoEgVwII.d.ts} +6 -2
  49. package/dist/{package-J49Ck6S2.d.ts.map → package-KoEgVwII.d.ts.map} +1 -1
  50. package/dist/{pres-C6qgOFAa.d.ts → pres-BA9_lJbY.d.ts} +32 -12
  51. package/dist/pres-BA9_lJbY.d.ts.map +1 -0
  52. package/dist/{presentation-DGYlAWhl.js → presentation-Cyl74rq2.js} +70 -35
  53. package/dist/presentation-Cyl74rq2.js.map +1 -0
  54. package/dist/{presentation-types-8jLQHI4M.d.ts → presentation-types-B3VQH4Bz.d.ts} +19 -15
  55. package/dist/presentation-types-B3VQH4Bz.d.ts.map +1 -0
  56. package/dist/read.d.ts +6 -6
  57. package/dist/read.js +3 -3
  58. package/dist/script.d.ts +2 -2
  59. package/dist/script.d.ts.map +1 -1
  60. package/dist/script.js +11 -11
  61. package/dist/script.js.map +1 -1
  62. package/dist/{shapes-re0KyQk_.js → shapes-BcyFdZpp.js} +14 -10
  63. package/dist/shapes-BcyFdZpp.js.map +1 -0
  64. package/dist/{slide-Dx2ZeVZ6.d.ts → slide-BqPtyKmb.d.ts} +12 -7
  65. package/dist/slide-BqPtyKmb.d.ts.map +1 -0
  66. package/dist/{table-cell-margins-EVg0EwxT.js → table-cell-margins-PDshga8T.js} +4 -4
  67. package/dist/{table-cell-margins-EVg0EwxT.js.map → table-cell-margins-PDshga8T.js.map} +1 -1
  68. package/dist/{table-dom-BTDP3lEP.js → table-dom-CVbvUfgh.js} +3 -3
  69. package/dist/{table-dom-BTDP3lEP.js.map → table-dom-CVbvUfgh.js.map} +1 -1
  70. package/dist/{text-sN64Otf_.js → text-BvFFMMFQ.js} +38 -36
  71. package/dist/{text-sN64Otf_.js.map → text-BvFFMMFQ.js.map} +1 -1
  72. package/dist/{text-anchor-CrYXAfUu.js → text-anchor-BgLPbwbL.js} +2 -2
  73. package/dist/{text-anchor-CrYXAfUu.js.map → text-anchor-BgLPbwbL.js.map} +1 -1
  74. package/dist/{units-internal-XJlf-hOl.js → units-internal-DFcUYjh3.js} +11 -6
  75. package/dist/units-internal-DFcUYjh3.js.map +1 -0
  76. package/dist/{zip-C0leZZMj.d.ts → zip-CTll_dr0.d.ts} +2 -2
  77. package/dist/{zip-C0leZZMj.d.ts.map → zip-CTll_dr0.d.ts.map} +1 -1
  78. package/dist/{zip-CKd8ihcf.js → zip-CYZ0F6BV.js} +2 -2
  79. package/dist/{zip-CKd8ihcf.js.map → zip-CYZ0F6BV.js.map} +1 -1
  80. package/dist/zip.d.ts +2 -2
  81. package/dist/zip.js +2 -2
  82. package/dist/{zoom-DPUHh85d.js → zoom-BoNyOlPm.js} +65 -51
  83. package/dist/zoom-BoNyOlPm.js.map +1 -0
  84. package/package.json +25 -25
  85. package/skills/ts-pptx-upstream/SKILL.md +18 -18
  86. package/dist/html-dom-Iuog2wdK.js.map +0 -1
  87. package/dist/image-size-CvN2iCA4.js.map +0 -1
  88. package/dist/notes-Dh12JAbn.js.map +0 -1
  89. package/dist/pres-C6qgOFAa.d.ts.map +0 -1
  90. package/dist/presentation-DGYlAWhl.js.map +0 -1
  91. package/dist/presentation-types-8jLQHI4M.d.ts.map +0 -1
  92. package/dist/shapes-re0KyQk_.js.map +0 -1
  93. package/dist/slide-Dx2ZeVZ6.d.ts.map +0 -1
  94. package/dist/units-internal-XJlf-hOl.js.map +0 -1
  95. package/dist/zoom-DPUHh85d.js.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,22 @@
1
- # ts-pptx
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="assets/readme/banner/banner-dark.svg">
5
+ <img alt="pptx-ts: write a program, get a PowerPoint file" src="assets/readme/banner/banner-light.svg">
6
+ </picture>
7
+
8
+ [![npm][npm-badge]][npm]
9
+ [![Downloads][downloads-badge]][npm]
10
+ [![CI][ci-badge]][ci]
11
+ [![License][license-badge]][license]
12
+
13
+ ---
14
+
15
+ [Install](#install) • [Quickstart](#quickstart) • [Read and edit](#read-and-edit-decks-too) • [Compare](#how-this-compares-with-pptxgenjs) • [Docs](https://shbernal.github.io/pptx-ts/)
16
+
17
+ ---
18
+
19
+ </div>
2
20
 
3
21
  > **`@shbernal/ts-pptx` is an alias.** It is the same package as
4
22
  > [`pptx-ts`](https://www.npmjs.com/package/pptx-ts), published from the
@@ -8,103 +26,130 @@
8
26
  > `pptx-ts` is the canonical name, and the issue tracker, the changelog and
9
27
  > every example below use it.
10
28
 
11
- [![npm](https://img.shields.io/npm/v/pptx-ts)](https://www.npmjs.com/package/pptx-ts)
12
- [![weekly downloads](https://img.shields.io/npm/dw/pptx-ts.svg?label=npm%20downloads&logo=npm)](https://www.npmjs.com/package/pptx-ts)
13
- [![total downloads](https://img.shields.io/npm/dt/pptx-ts.svg?label=npm%20total%20downloads&logo=npm)](https://www.npmjs.com/package/pptx-ts)
14
- [![CI](https://github.com/shbernal/ts-pptx/actions/workflows/ci.yml/badge.svg)](https://github.com/shbernal/ts-pptx/actions/workflows/ci.yml)
15
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
29
+ <p align="center">
30
+ <picture>
31
+ <source media="(prefers-color-scheme: dark)" srcset="assets/readme/demo/demo-dark.svg">
32
+ <img alt="A 28-line TypeScript program runs and writes report.pptx, a slide with a revenue bar chart" src="assets/readme/demo/demo-light.svg">
33
+ </picture>
34
+ </p>
16
35
 
17
- **Write a program, get a PowerPoint file.**
36
+ pptx-ts writes `.pptx` files from TypeScript.
37
+ You describe slides in code, and a deck comes out that opens cleanly in desktop PowerPoint.
38
+ PowerPoint never runs, so there is no Office licence and nothing to install on the machine doing the writing.
18
39
 
19
- A `.pptx` is a zip full of XML. ts-pptx writes that zip for you, so you describe
20
- slides in TypeScript and a `.pptx` comes out the other end. PowerPoint never runs, no
21
- Office licence is involved, and nothing has to be installed on the machine doing the
22
- writing. The file opens cleanly in desktop PowerPoint, and Keynote, LibreOffice Impress
23
- and Google Slides import it on a best-effort basis.
40
+ - Text, tables that page across slides, shapes, connectors, pictures, SVG, video and audio.
41
+ - Native charts backed by an embedded workbook, so PowerPoint's "Edit Data" works.
42
+ - Slide masters, layouts, sections, speaker notes, gradients and an image clipped to a shape.
43
+ - LaTeX maths, embedded spreadsheets and 3D models.
44
+ - [An HTML `<table>` becomes paged slides](docs/html-tables.md), in the browser or under Node.
45
+ - [Text measured against the real font](docs/text-fit.md), so a box shrinks or grows to fit before the file is written.
46
+ - Opens existing decks too: [inspect](docs/reference/pptx-inspection.md), [edit](docs/reading/read-and-edit.md), or [turn one into code](docs/reference/pptx-to-script.md).
24
47
 
25
- Reach for it when a deck has to be built from data that changes: a monthly report,
26
- one deck per customer, a hundred decks per night, or a download button on a page that
27
- hands the user a deck built from what they are looking at.
48
+ <p align="center">
49
+ <img alt="Nine slides from the two showcase decks: a consulting cover, a cost waterfall, a dark pitch-deck cover over a night sky, KPI cards, a pipeline diagram with connectors, a business-case table with Harvey balls, a terminal mock, a 2x2 prioritisation matrix and an area chart" src="assets/readme/gallery/gallery.webp">
50
+ </p>
28
51
 
29
- ## Install
52
+ pptx-ts wrote every slide above, and LibreOffice rendered them.
53
+ They come from the two [showcase decks](www/demos/decks/README.md).
30
54
 
31
- ```bash
32
- pnpm add pptx-ts
33
- ```
55
+ ## Why pptx-ts?
34
56
 
35
- `@shbernal/ts-pptx` is the same package under its first name, so install one or the other.
36
- [Installation](docs/getting-started/installation.md) covers npm, CommonJS and the optional
37
- math dependencies.
57
+ Use it when a deck has to be built from data that changes:
38
58
 
39
- ## Quick start
59
+ - a monthly report
60
+ - one deck per customer
61
+ - a hundred decks every night
62
+ - a download button that hands the user a deck built from what they are looking at
40
63
 
41
- ```ts
42
- import TsPptx from "pptx-ts"
64
+ Every deck has to open cleanly in desktop PowerPoint.
65
+ Keynote, LibreOffice Impress and Google Slides import it on a best-effort basis.
43
66
 
44
- const pptx = new TsPptx()
45
- const slide = pptx.addSlide()
67
+ ## Quickstart
46
68
 
47
- slide.addText("Hello from ts-pptx", {
48
- x: 1,
49
- y: 1,
50
- w: 8,
51
- h: 1,
52
- fontSize: 24,
53
- color: "363636",
54
- })
69
+ 1. Install pptx-ts on your project:
55
70
 
56
- await pptx.writeFile({ fileName: "example.pptx" })
57
- ```
71
+ [![Node ≥ 24][node-badge]][node]
72
+
73
+ ```bash
74
+ pnpm add pptx-ts
75
+ ```
76
+
77
+ 2. Save this as `hello.mts`:
78
+
79
+ ```ts
80
+ import TsPptx from "pptx-ts"
81
+
82
+ const pptx = new TsPptx()
83
+ const slide = pptx.addSlide()
84
+
85
+ slide.addText("Hello from pptx-ts", {
86
+ x: 1,
87
+ y: 1,
88
+ w: 8,
89
+ h: 1,
90
+ fontSize: 24,
91
+ color: "363636",
92
+ })
58
93
 
59
- That is the whole shape of it. Make a presentation, add a slide, put things on the
60
- slide, write the file. Positions are in inches by default, so `x: 1, y: 1` is an inch
61
- in from the top-left corner of a 10 by 5.625 inch slide.
62
- [Your first deck](docs/getting-started/first-deck.md) builds a bigger one from data, with a
63
- table, a chart and speaker notes.
94
+ await pptx.writeFile({ fileName: "hello.pptx" })
95
+ ```
64
96
 
65
- ## What you can put on a slide
97
+ 2. Run it. Node 24 strips the types itself, so there is no build step.
66
98
 
67
- Text and rich paragraphs. Tables, including ones that spill onto as many slides as
68
- they need. Shapes and connectors between them. Pictures, SVGs, video and audio.
69
- Charts, with a real embedded workbook behind them, so double-clicking a chart in
70
- PowerPoint opens its data the way it does for a chart a human made. Speaker notes,
71
- sections, slide masters and layouts, gradients, an image clipped to a shape, a
72
- spreadsheet embedded as an object, a 3D model, and LaTeX maths.
99
+ ```bash
100
+ node hello.mts
101
+ ```
73
102
 
74
- Two features worth knowing about by name:
103
+ 3. Open `hello.pptx`.
75
104
 
76
- - **[An HTML table becomes slides](docs/html-tables.md).** Point `tableToSlides` at a
77
- `<table>` you already have and it comes out as a PowerPoint table, paged across
78
- slides. Works in a browser and under Node.
79
- - **[Text that has to fit](docs/text-fit.md).** ts-pptx can measure the text
80
- against the real font and shrink or grow the box before it writes the file, instead
81
- of leaving you to guess at font sizes.
105
+ Positions are in inches, from the top-left corner of a 10 by 5.625 inch slide.
106
+ [Your first deck](docs/getting-started/first-deck.md) builds a four-slide report from an array, with a table, a chart and speaker notes.
82
107
 
83
- ## Reading decks, not only writing them
108
+ ## Read and edit decks too
84
109
 
85
- Writing is half of it. ts-pptx also opens a `.pptx` you already have, which is
86
- unusual: the library it descends from generates decks and does not read them.
110
+ PptxGenJS, the library pptx-ts descends from, only writes.
111
+ pptx-ts also opens a `.pptx` you already have.
87
112
 
88
- - **[Look inside one](docs/reference/pptx-inspection.md)** and get slide count, size,
89
- parts, media and fonts, without loading the whole thing into a model.
90
- - **[Edit one](docs/reading/read-and-edit.md)**. Open a deck, change the text on slide
91
- four, save it back. Parts you did not touch come out byte for byte as they went in.
92
- - **[Turn one into code](docs/reference/pptx-to-script.md)**. Point it at a deck and
93
- get TypeScript that rebuilds it. Anything it could not express is reported to you
94
- rather than dropped in silence. It is the fastest way to learn the API: build a
95
- slide by hand in PowerPoint, then read the script for it.
113
+ | Entry point | What it does |
114
+ | --- | --- |
115
+ | `pptx-ts/inspect` | Slide count, size, parts, media and fonts, without loading the whole deck. [Guide](docs/reference/pptx-inspection.md) |
116
+ | `pptx-ts/read` | Open a deck, change the text on slide four, save it. Parts you did not touch keep their original bytes. [Guide](docs/reading/read-and-edit.md) |
117
+ | `pptx-ts/script` | Print TypeScript that rebuilds a deck, plus a note for each construct it could not carry. [Guide](docs/reference/pptx-to-script.md) |
96
118
 
97
- ## Where it runs
119
+ ```ts
120
+ import { readFile, writeFile } from "node:fs/promises"
121
+ import { Presentation } from "pptx-ts/read"
122
+
123
+ const deck = await Presentation.load(await readFile("report.pptx"))
124
+ const title = deck.slides[0]?.placeholder("title")
125
+ if (title) title.text = "Q3 review"
126
+
127
+ await writeFile("report.pptx", await deck.save())
128
+ ```
129
+
130
+ The script printer is the quickest way to learn the API.
131
+ Build a slide by hand in PowerPoint, then read the code for it.
132
+
133
+ ## How it works
134
+
135
+ <p align="center">
136
+ <picture>
137
+ <source media="(prefers-color-scheme: dark)" srcset="assets/readme/how-it-works/loop-dark.svg">
138
+ <img alt="pptx-ts writes a .pptx from your code; pptx-ts/read loads and saves it, pptx-ts/inspect lists its contents, and pptx-ts/script turns it back into TypeScript" src="assets/readme/how-it-works/loop-light.svg">
139
+ </picture>
140
+ </p>
98
141
 
99
- | Runtime | Load it with | `writeFile` |
142
+ A `.pptx` is a zip of XML parts.
143
+ pptx-ts builds those parts from your calls and zips them, with no Office process involved.
144
+
145
+ | Runtime | Import | `writeFile` |
100
146
  | --- | --- | --- |
101
147
  | Node.js 24 or later | `import`, or `require()` with the class on `.default` | writes to disk |
102
- | A browser app built with a bundler | `import` | downloads the file |
103
- | A browser page with no build step | `import TsPptx from "https://esm.sh/pptx-ts/browser"` in a module script | downloads the file |
148
+ | Browser, with a bundler | `import` | downloads the file |
149
+ | Browser, no build step | `import TsPptx from "https://esm.sh/pptx-ts/browser"` | downloads the file |
104
150
  | Deno, Bun, edge workers | `import` | throws; use `toBytes()` |
105
151
 
106
- [Where it runs](docs/getting-started/runtime.md) lists every entry point and how each runtime
107
- loads the one ESM build.
152
+ [Where it runs](docs/getting-started/runtime.md) lists every entry point.
108
153
 
109
154
  <!-- comparison:start -->
110
155
  <!-- GENERATED REGION. Do not edit by hand.
@@ -113,20 +158,20 @@ loads the one ESM build.
113
158
 
114
159
  ## How this compares with PptxGenJS
115
160
 
116
- ts-pptx is an independent derivative of
161
+ pptx-ts is an independent derivative of
117
162
  [PptxGenJS](https://github.com/gitbrent/PptxGenJS), detached at its v4.0.1. Both were
118
- measured on 2026-09-21 by building the same 22 deck intents with each library and reading
163
+ measured on 2026-10-11 by building the same 22 deck intents with each library and reading
119
164
  the bytes that came out.
120
165
 
121
- - **Construct coverage:** ts-pptx emitted 21 of 22, pptxgenjs 10 of 22. Nothing in the
122
- corpus is emitted by pptxgenjs and not by ts-pptx.
123
- - **Schema validity:** of the decks each library built, 21 of 21 ts-pptx decks and 0 of 10
166
+ - **Construct coverage:** pptx-ts emitted 21 of 22, pptxgenjs 10 of 22. Nothing in the
167
+ corpus is emitted by pptxgenjs and not by pptx-ts.
168
+ - **Schema validity:** of the decks each library built, 21 of 21 pptx-ts decks and 0 of 10
124
169
  pptxgenjs decks validate with no error against the Open XML SDK.
125
- - **Adoption:** pptxgenjs is downloaded 10,539,687 times a month, against 1,780 for
126
- ts-pptx. If a large installed base matters to you more than the differences above, use
170
+ - **Adoption:** pptxgenjs is downloaded 14,641,405 times a month, against 1,915 for
171
+ pptx-ts. If a large installed base matters to you more than the differences above, use
127
172
  pptxgenjs.
128
- - **Activity:** last commit on the default branch, 2026-09-15 for ts-pptx and 2025-06-26
129
- for pptxgenjs. Last npm publish, 2026-08-29 and 2025-06-26.
173
+ - **Activity:** last commit on the default branch, 2026-10-10 for pptx-ts and 2025-06-26
174
+ for pptxgenjs. Last npm publish, 2026-09-21 and 2025-06-26.
130
175
 
131
176
  Where the two libraries part company is on the [comparison page](docs/comparison.md), and
132
177
  [how it was measured](docs/comparison-method.md) has every full table. Every intent as
@@ -135,40 +180,28 @@ PptxGenJS](docs/comparison-syntax.md).
135
180
 
136
181
  <!-- comparison:end -->
137
182
 
138
- ## Documentation
139
-
140
- The documentation site, with the generated API reference, is at
141
- **<https://shbernal.github.io/ts-pptx/>**. The [demos page](https://shbernal.github.io/ts-pptx/demos)
142
- builds a quarterly review deck in your browser and previews the slides.
143
-
144
- - Start with the [Introduction](docs/getting-started/introduction.md),
145
- [Your first deck](docs/getting-started/first-deck.md) and
146
- [Core concepts](docs/getting-started/concepts.md)
147
- - [Tables](docs/tables.md), [connectors](docs/connectors.md), [groups](docs/groups.md) and
148
- [HTML tables to slides](docs/html-tables.md)
149
- - [Smaller bundles](docs/bundle-size.md) for a browser program that composes only what it uses
150
- - [Errors and warnings](docs/errors-and-warnings.md) and
151
- [troubleshooting](docs/troubleshooting.md)
152
-
153
- ## Something wrong, or missing?
183
+ ## Learn more
154
184
 
155
- Open an issue: <https://github.com/shbernal/ts-pptx/issues>. Errors the library knows
156
- are its own fault print that link themselves.
157
-
158
- If an agent writes most of your code, install the `ts-pptx-upstream` skill that ships inside
159
- the package. It turns a library defect the agent hits into a filed issue with a small
160
- reproduction, instead of a silent workaround:
161
-
162
- ```bash
163
- npx skills add ./node_modules/pptx-ts -s '*' -a claude-code -a codex -a universal -y
164
- ```
185
+ - [Documentation site](https://shbernal.github.io/pptx-ts/), with the API reference
186
+ - [Live demo](https://shbernal.github.io/pptx-ts/demos): build a strategy consulting deck and a startup pitch deck in your browser
187
+ - [Core concepts](docs/getting-started/concepts.md), [tables](docs/tables.md), [connectors](docs/connectors.md) and [groups](docs/groups.md)
188
+ - [Smaller browser bundles](docs/bundle-size.md)
189
+ - [Errors and warnings](docs/errors-and-warnings.md) and [troubleshooting](docs/troubleshooting.md)
165
190
 
166
- Name the runtimes you use. [CONTRIBUTING.md](CONTRIBUTING.md) covers what the skill does
167
- with a report and how to refresh it after a version bump.
191
+ Found a bug? [Open an issue](https://github.com/shbernal/pptx-ts/issues).
192
+ Errors that are the library's fault print that link themselves.
168
193
 
169
- ## License
194
+ If an agent writes most of your code, install the `ts-pptx-upstream` skill that ships in the package.
195
+ It files a library defect the agent hits as an issue with a small reproduction, instead of a silent workaround.
196
+ [CONTRIBUTING.md](CONTRIBUTING.md#the-skill-that-files-the-issue-for-you) has the install command.
170
197
 
171
- Copyright (c) 2015-2022 Brent Ely.
172
- Modifications copyright (c) 2026 shbernal.
173
198
 
174
- [MIT](LICENSE)
199
+ [npm]: https://www.npmjs.com/package/pptx-ts
200
+ [npm-badge]: https://img.shields.io/npm/v/pptx-ts?style=for-the-badge&logo=npm&logoColor=e9855c&label=npm&labelColor=1b1b1f&color=b4451f
201
+ [downloads-badge]: https://img.shields.io/npm/dm/pptx-ts?style=for-the-badge&label=downloads&labelColor=1b1b1f&color=b4451f
202
+ [ci]: https://github.com/shbernal/pptx-ts/actions/workflows/ci.yml
203
+ [ci-badge]: https://img.shields.io/github/actions/workflow/status/shbernal/pptx-ts/ci.yml?branch=main&style=for-the-badge&logo=githubactions&logoColor=e9855c&label=CI&labelColor=1b1b1f&color=b4451f
204
+ [node]: package.json
205
+ [node-badge]: https://img.shields.io/badge/node-%E2%89%A524-b4451f?style=for-the-badge&logo=nodedotjs&logoColor=e9855c&labelColor=1b1b1f
206
+ [license]: LICENSE
207
+ [license-badge]: https://img.shields.io/github/license/shbernal/pptx-ts?style=for-the-badge&labelColor=1b1b1f&color=b4451f
@@ -1,7 +1,7 @@
1
- import { l as warn } from "./errors-C4oENPcu.js";
2
- import { C as usableTableWidthEmu, R as DEF_SLIDE_MARGIN_IN, _ as resolveCellMarginsInches, b as resolveTableColWidthsEmu, c as inch2Emu, d as marginToEmu, m as pinnedRowHeightInches, s as getSmartParseNumber, t as autoPageLineHeightEmu, y as resolveSlideMarginsInches } from "./units-internal-XJlf-hOl.js";
3
- import { F as EMU_PER_INCH } from "./table-cell-margins-EVg0EwxT.js";
4
- import { a as resolveSpan, n as tableColCount, r as walkTableGrid, s as withCheckedSpans } from "./grid-DikTjFey.js";
1
+ import { l as warn } from "./errors-Da2nXCJm.js";
2
+ import { C as usableTableWidthEmu, R as DEF_SLIDE_MARGIN_IN, _ as resolveCellMarginsInches, b as resolveTableColWidthsEmu, c as inch2Emu, d as marginToEmu, m as pinnedRowHeightInches, s as getSmartParseNumber, t as autoPageLineHeightEmu, y as resolveSlideMarginsInches } from "./units-internal-DFcUYjh3.js";
3
+ import { F as EMU_PER_INCH } from "./table-cell-margins-PDshga8T.js";
4
+ import { a as resolveSpan, n as tableColCount, r as walkTableGrid, s as withCheckedSpans } from "./grid-9B2w5EaY.js";
5
5
  //#region src/gen/table/autopage.ts
6
6
  /**
7
7
  * A cell for the pager's working grid, carrying the source cell's options only when it has some.
@@ -533,4 +533,4 @@ function getSlidesForTableRows(rows = [], tableProps = {}, presLayout, masterSli
533
533
  //#endregion
534
534
  export { getSlidesForTableRows as t };
535
535
 
536
- //# sourceMappingURL=autopage-odPz7zZO.js.map
536
+ //# sourceMappingURL=autopage-D4kyVp11.js.map