@tycoworks/tycoslide 0.16.0 → 0.16.1
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
CHANGED
|
@@ -4,7 +4,7 @@ Create editable PowerPoint slides from markdown, using your existing .pptx templ
|
|
|
4
4
|
|
|
5
5
|
## Getting started
|
|
6
6
|
|
|
7
|
-
1. **Create a tycoslide theme.** Install the [create-theme](skills/create-theme) skill (`npx skills add tycoworks/tycoslide
|
|
7
|
+
1. **Create a tycoslide theme.** Install the [create-theme](skills/create-theme) skill (`npx skills add tycoworks/tycoslide`) and give an agent such as Claude Code or Codex your `.pptx`. You'll get back an npm package of mapped layouts, colors, and visual assets, like the [tycoworks-theme](https://github.com/tycoworks/tycoworks-theme).
|
|
8
8
|
2. **Write slides in markdown.** GitHub-flavored markdown is supported; see [Markdown support](#markdown-support) below. tycoslide themes also include an agent skill, so an agent can write the slides for you.
|
|
9
9
|
3. **Build.** `npx tycoslide build deck.md` compiles the markdown into an editable PowerPoint file.
|
|
10
10
|
|
package/dist/agents/commands.js
CHANGED
|
@@ -3,7 +3,7 @@ import { basename, posix, resolve } from "node:path";
|
|
|
3
3
|
import { loadThemeConfig } from "../index.js";
|
|
4
4
|
import { loadAssetCatalog } from "./catalog.js";
|
|
5
5
|
import { extractTemplate, summarizeExtraction } from "./extract.js";
|
|
6
|
-
import { ASSETS_DIR, ASSETS_FILE, MANIFEST_FILE, PACKAGE_JSON, SKILL_FILE, SKILL_ZIP_EXT, TEMPLATE_FILE, THEME_CONFIG, THEME_PACKAGE_DIR, } from "./files.js";
|
|
6
|
+
import { ASSETS_DIR, ASSETS_FILE, MANIFEST_FILE, PACKAGE_JSON, SKILL_FILE, SKILL_TEMPLATE_FILE, SKILL_ZIP_EXT, TEMPLATE_FILE, THEME_CONFIG, THEME_PACKAGE_DIR, } from "./files.js";
|
|
7
7
|
import { generateManifest } from "./manifest.js";
|
|
8
8
|
import { renameSkill, skillPackageJson, zipDir } from "./skill.js";
|
|
9
9
|
/** The CLI's line for something written, with an optional note on what it holds. */
|
|
@@ -12,7 +12,7 @@ function wrote(target, detail) {
|
|
|
12
12
|
}
|
|
13
13
|
/** Register the agent layer's commands on the CLI program. */
|
|
14
14
|
export function registerAgentCommands(program, tool) {
|
|
15
|
-
const skillMdPath = resolve(tool.root, THEME_PACKAGE_DIR,
|
|
15
|
+
const skillMdPath = resolve(tool.root, THEME_PACKAGE_DIR, SKILL_TEMPLATE_FILE);
|
|
16
16
|
program
|
|
17
17
|
.command("package")
|
|
18
18
|
.description("Zip the theme into an Agent Skill for AI agents")
|
package/dist/agents/files.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare const ASSETS_FILE = "assets.json";
|
|
|
18
18
|
export declare const ASSETS_ARCHIVE = "assets.dat";
|
|
19
19
|
export declare const SKILL_FILE = "SKILL.md";
|
|
20
20
|
export declare const THEME_PACKAGE_DIR = "theme-package";
|
|
21
|
+
export declare const SKILL_TEMPLATE_FILE = "SKILL.template.md";
|
|
21
22
|
/**
|
|
22
23
|
* npm's package manifest: the theme's, which names the skill, and the packaged
|
|
23
24
|
* skill's own, which it installs from (authored rather than copied).
|
package/dist/agents/files.js
CHANGED
|
@@ -20,9 +20,11 @@ export const ASSETS_ARCHIVE = "assets.dat";
|
|
|
20
20
|
// the root of a skill folder, and a case-sensitive filesystem will not find any
|
|
21
21
|
// other.
|
|
22
22
|
export const SKILL_FILE = "SKILL.md";
|
|
23
|
-
// The folder holding the
|
|
24
|
-
// out of the repo root so skill installers do not mistake it for this repo's own skill.
|
|
23
|
+
// The folder holding the deck skill that `package` puts in each packaged theme.
|
|
25
24
|
export const THEME_PACKAGE_DIR = "theme-package";
|
|
25
|
+
// The deck skill as tycoslide ships it, named so skill installers scanning this
|
|
26
|
+
// repo don't offer it as a skill of its own; `package` writes it as SKILL_FILE.
|
|
27
|
+
export const SKILL_TEMPLATE_FILE = "SKILL.template.md";
|
|
26
28
|
/**
|
|
27
29
|
* npm's package manifest: the theme's, which names the skill, and the packaged
|
|
28
30
|
* skill's own, which it installs from (authored rather than copied).
|
package/docs/markdown.md
CHANGED
|
@@ -215,7 +215,7 @@ The theme owns all styling. These directives are rejected at build time:
|
|
|
215
215
|
|
|
216
216
|
Each parameter or slot in the layout definition may declare:
|
|
217
217
|
- **`accepts`** (slots, required) -- an array of `text`, `table`, `image`.
|
|
218
|
-
- **`required: true`** -- the slide has no usable default and the build fails if the parameter/slot has no value
|
|
218
|
+
- **`required: true`** -- the slide has no usable default and the build fails if the parameter/slot has no value.
|
|
219
219
|
- **optional (the default)** -- a parameter or slot you leave unfilled is dropped from the slide (its shape is removed), so a layout with numbered slots (e.g. up to six sections, up to four stats) renders only the ones you fill.
|
|
220
220
|
|
|
221
221
|
Each layout also declares a `slideNumber` pointing at the physical slide in the theme's template -- unique per layout (one layout maps to one physical slide).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tycoworks/tycoslide",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Create editable PowerPoint slides from markdown, using your existing .pptx templates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"format": "biome format --write ."
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@xmldom/xmldom": "^0.9.
|
|
29
|
+
"@xmldom/xmldom": "^0.9.12",
|
|
30
30
|
"commander": "^15.0.0",
|
|
31
|
-
"image-size": "^2.0.
|
|
31
|
+
"image-size": "^2.0.4",
|
|
32
32
|
"jszip": "^3.10.1",
|
|
33
33
|
"mermaid": "^11.16.1",
|
|
34
34
|
"playwright-core": "^1.62.1",
|
|
@@ -3,6 +3,7 @@ name: slides
|
|
|
3
3
|
description: >
|
|
4
4
|
Build branded slides, presentations, pitch decks, or sales collateral as a .pptx.
|
|
5
5
|
Trigger on "deck," "slides," "presentation," "pitch," ".pptx," or "build me a deck."
|
|
6
|
+
compatibility: Needs Node 23.6+ and network access to npm on first use. LibreOffice (soffice) and poppler (pdftoppm) to preview slides. Chrome only if decks contain mermaid diagrams.
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# slides
|
|
@@ -16,7 +17,7 @@ npm install
|
|
|
16
17
|
unzip -nq assets.dat
|
|
17
18
|
```
|
|
18
19
|
|
|
19
|
-
This installs the tycoslide engine and its dependencies, and unpacks the theme's images so you can copy them into decks. You only need to do this once. If there is no `assets.dat`, skip the unzip.
|
|
20
|
+
This installs the tycoslide engine and its dependencies, and unpacks the theme's images so you can copy them into decks. You only need to do this once. If there is no `assets.dat`, skip the unzip. Run every `npx tycoslide` command from this folder too, since that is where the engine is installed and npx finds it nowhere else.
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
## Overview
|
|
@@ -44,7 +45,7 @@ Study each layout's `slots` before writing any slides.
|
|
|
44
45
|
|
|
45
46
|
### Images
|
|
46
47
|
|
|
47
|
-
Images live in `assets.json`: every logo, illustration and icon the theme offers, keyed by category and name, each with a `path`, a `fit` and a `description`. **Search it, do not read it whole** -- an icon set alone can run to thousands of entries. **Search for what the icon depicts, not what you mean by it**: a catalog is indexed by image, so "freshness" finds nothing while `grep -i "clock" assets.json` and `grep -i "bolt"` find the icon you wanted.
|
|
48
|
+
Images live in `assets.json`: every logo, illustration and icon the theme offers, keyed by category and name, each with a `path`, a `fit` and a `description`. **Search it, do not read it whole** -- an icon set alone can run to thousands of entries. **Search for what the icon depicts, not what you mean by it**: a catalog is indexed by image, so "freshness" finds nothing while `grep -i -B2 "clock" assets.json` and `grep -i -B2 "bolt" assets.json` find the icon you wanted, with its path and fit on the lines above.
|
|
48
49
|
|
|
49
50
|
To use an image, copy it into your deck's folder at the same relative path, then write its `path` and `fit` in the image:
|
|
50
51
|
|
|
@@ -127,7 +128,7 @@ soffice --headless --convert-to pdf --outdir . <deck>.pptx
|
|
|
127
128
|
pdftoppm -png -r 96 <deck>.pdf <name>
|
|
128
129
|
```
|
|
129
130
|
|
|
130
|
-
Read each slide image and check for:
|
|
131
|
+
LibreOffice substitutes any font it can't find, so line breaks in the images can differ slightly from PowerPoint's. Read each slide image and check for:
|
|
131
132
|
|
|
132
133
|
- **Word wrapping** -- text that breaks mid-word or overflows its container
|
|
133
134
|
- **Cramped text** -- content too dense for the slide area
|