@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 --skill create-theme`) 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).
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
 
@@ -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, SKILL_FILE);
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")
@@ -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).
@@ -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 SKILL.md template copied into each packaged theme, kept
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 (e.g. team-member photos, icon-grid icons, the quote logo).
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.0",
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.10",
29
+ "@xmldom/xmldom": "^0.9.12",
30
30
  "commander": "^15.0.0",
31
- "image-size": "^2.0.2",
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