Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

233 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Animation Showcase
Demonstrates the first-class pptx **`animation` element** and its full property
surface. Three files work together:
- **animations.sh** — Shell script driving `officecli create/open/add/set/close`.
- **animations.py** — SDK twin (`officecli-sdk`), same deck via `doc.batch(...)`.
- **animations.pptx** — The generated 7-slide deck.
## The animation element
An animation is a child element of a **shape** (or **chart**):
```bash
officecli add animations.pptx /slide[N]/shape[M] --type animation \
--prop effect=fade --prop class=entrance --prop duration=800
```
`add ... --type animation` gives you the full timing model. (The legacy
`set --prop animation=fade-entrance-800` compound-token shortcut still works for
quick one-liners, but the element form is what exposes trigger/delay/repeat/
autoReverse/restart/motion-paths.)
On `get`, each facet is its own key — there is **no** composite `animation` key
in readback:
```bash
officecli get animations.pptx /slide[2]/shape[3]/animation[1]
# → effect=fade class=entrance presetId=10 trigger=onClick duration=800
```
## Regenerate
```bash
cd examples/ppt
bash animations.sh # → animations.pptx (7 slides, 44 animations)
# or the SDK twin:
python3 animations.py
```
## Property reference
| Prop | Values / format | Notes |
|---|---|---|
| `effect` | preset name (see catalog below) | The animation preset. Some effects require a specific `class`. |
| `class` | `entrance` \| `exit` \| `emphasis` \| `motion` | Category. `spin/grow/wave` need `emphasis`; `motion` needs `path=`. |
| `trigger` | `onClick` \| `withPrevious` \| `afterPrevious` | When it starts. Default `onClick`. |
| `duration` | ms integer (alias `dur`) | e.g. `500` = 0.5s. |
| `delay` | ms integer | Delay before starting. |
| `repeat` | positive int \| `indefinite` | Loop count, or loop forever. |
| `autoReverse` | `true` / `false` | Play forward then reverse (doubles the visible run). |
| `restart` | `always` \| `whenNotActive` \| `never` | Behavior when re-triggered. |
| `direction` | `in`/`out`/`left`/`right`/`up`/`down` (+ aliases `top`/`bottom`, `l/r/u/d`) | For directional effects. |
| `path` | `line` \| `arc` \| `circle` \| `diamond` \| `triangle` \| `square` \| `custom` | Motion preset (only with `class=motion`). |
| `d` | SVG-like path, coords 0..1 of slide | Custom motion path (only with `path=custom`; auto-appends `E`). |
Get-only facets: `presetId`, `easein`, `easeout`, `motionPath`.
## Timing model
Animations on a slide play as an ordered list. Each animation's `trigger`
decides how it relates to the one before it:
- **`onClick`** — waits for a mouse click to start (the default).
- **`afterPrevious`** — starts automatically when the previous animation ends
(add `delay=` for a gap).
- **`withPrevious`** — starts at the same instant as the previous animation.
Chaining `onClick → afterPrevious → withPrevious …` builds a self-playing
sequence off a single click (see Slide 6).
## Effect catalog
**Entrance / Exit** (same names, pick via `class=`):
`appear`, `fade`, `fly`, `zoom`, `wipe`, `bounce`, `float`, `swivel`, `split`,
`wheel`, `checkerboard`, `blinds`, `dissolve`, `flash`, `box`, `circle`,
`diamond`, `plus`, `strips`, `wedge`, `random`.
**Emphasis** (`class=emphasis`):
motion — `spin`, `grow`, `wave`, `bold`, `growShrink`, `teeter`, `pulse`;
color — `fillColor`, `lineColor`, `transparency`, `complementaryColor`,
`complementaryColor2`, `contrastingColor`, `darken`, `desaturate`, `lighten`,
`objectColor`, `colorPulse`.
**Motion** (`class=motion` + `path=`): `line`, `arc`, `circle`, `diamond`,
`triangle`, `square`, `custom`.
**Template exit effects** (`class=exit`, verbatim PowerPoint OOXML):
`contract`, `centerRevolve`, `collapse`, `floatOut`, `shrinkTurn`, `sinkDown`,
`spinner`, `basicZoom`, `stretchy`, `boomerang`, `credits`, `curveDown`,
`pinwheel`, `spiralOut`, `basicSwivel`.
> **Known limitation — template exit effects are lossy on readback.** These 15
> effects are backed by byte-for-byte PowerPoint-authored OOXML, so they render
> correctly in PowerPoint but **ignore the `duration` prop** (they keep the
> authored timing) and **do not round-trip their effect name** — `get` reports
> them as a generic `effect=fade`/`split`/`unknown` plus a `presetId`. Because
> the effect name doesn't survive a round-trip, this demo builds its slides from
> the effects that round-trip cleanly. Use the template effects directly in a
> deck when you want their exact PowerPoint look; just don't rely on `get`
> echoing the name back.
## Slides
### Slide 1 — Title
Radial-gradient title slide (`layout=title`, `background=radial:`, title +
subtitle placeholders, `transition=fade`).
### Slide 2 — Entrance Effects
Twelve entrance effects on a 4-column grid, each with its own `duration`.
```bash
officecli add animations.pptx /slide[2]/shape[2] --type animation \
--prop effect=appear --prop class=entrance --prop duration=400
officecli add animations.pptx /slide[2]/shape[3] --type animation \
--prop effect=fade --prop class=entrance --prop duration=800
# … fly, zoom, wipe, bounce, float, swivel, split, wheel, box, circle
```
**Features:** `effect=` (entrance family), `class=entrance`, `duration=`.
### Slide 3 — Exit Effects
Ten exit effects; directional ones (`fly`, `wipe`) add `direction=`.
```bash
officecli add animations.pptx /slide[3]/shape[3] --type animation \
--prop effect=fly --prop class=exit --prop direction=down --prop duration=600
officecli add animations.pptx /slide[3]/shape[6] --type animation \
--prop effect=wipe --prop class=exit --prop direction=left --prop duration=600
```
**Features:** `class=exit`, `direction=` on directional effects.
### Slide 4 — Emphasis & Color Effects
Six emphasis effects on ellipses — motion (`spin`, `grow`, `wave`, `growShrink`,
`teeter`) and `pulse`.
```bash
officecli add animations.pptx /slide[4]/shape[2] --type animation \
--prop effect=spin --prop class=emphasis --prop duration=1000
officecli add animations.pptx /slide[4]/shape[5] --type animation \
--prop effect=growShrink --prop class=emphasis --prop duration=800
```
**Features:** `class=emphasis`; color-change and motion emphasis effects.
### Slide 5 — Motion Paths
Preset paths (`line`, `arc`, `circle`, `diamond`, `square`) plus a custom `d=`.
```bash
officecli add animations.pptx /slide[5]/shape[2] --type animation \
--prop class=motion --prop path=line --prop direction=right --prop duration=1000
# Custom path — coords are 0..1 of the slide; a trailing 'E' is auto-appended
officecli add animations.pptx /slide[5]/shape[8] --type animation \
--prop class=motion --prop path=custom \
--prop d='M 0 0 L 0.3 -0.1 L 0.6 0.1 E' --prop duration=1500
```
**Features:** `class=motion`, `path=<preset|custom>`, `direction=`, `d=`.
`get` echoes the resolved path back as `motionPath=`.
### Slide 6 — Timing & Trigger Chaining
Five shapes chained into a self-playing sequence off one click, plus a `delay=`
and a slow (2000ms) run.
```bash
officecli add animations.pptx /slide[6]/shape[2] --type animation \
--prop effect=fade --prop class=entrance --prop trigger=onClick --prop duration=500
officecli add animations.pptx /slide[6]/shape[3] --type animation \
--prop effect=fly --prop class=entrance --prop trigger=afterPrevious --prop duration=600
officecli add animations.pptx /slide[6]/shape[4] --type animation \
--prop effect=zoom --prop class=entrance --prop trigger=withPrevious --prop duration=600
officecli add animations.pptx /slide[6]/shape[5] --type animation \
--prop effect=wipe --prop class=entrance --prop trigger=afterPrevious \
--prop delay=800 --prop duration=700
```
**Features:** `trigger=onClick|afterPrevious|withPrevious`, `delay=`, duration
range (5002000ms).
### Slide 7 — Repeat, autoReverse & Restart
```bash
officecli add animations.pptx /slide[7]/shape[2] --type animation \
--prop effect=spin --prop class=emphasis --prop repeat=3 --prop duration=800
officecli add animations.pptx /slide[7]/shape[3] --type animation \
--prop effect=pulse --prop class=emphasis --prop repeat=indefinite \
--prop trigger=withPrevious --prop duration=600
officecli add animations.pptx /slide[7]/shape[4] --type animation \
--prop effect=grow --prop class=emphasis --prop autoReverse=true \
--prop repeat=2 --prop duration=700
officecli add animations.pptx /slide[7]/shape[5] --type animation \
--prop effect=teeter --prop class=emphasis --prop restart=whenNotActive \
--prop repeat=indefinite --prop duration=500
```
**Features:** `repeat=<int>`, `repeat=indefinite`, `autoReverse=true`,
`restart=whenNotActive`.
## Complete feature coverage
| Feature | Slide |
|---------|-------|
| `add --type animation` element | 27 |
| `effect=` entrance family | 2 |
| `effect=` exit family | 3 |
| `effect=` emphasis (motion + color) | 4 |
| `class=entrance` / `exit` / `emphasis` / `motion` | 2 / 3 / 4 / 5 |
| `duration=` (4002000ms) | 27 |
| `delay=` | 6 |
| `direction=` on directional effects | 3, 5 |
| `trigger=onClick` / `afterPrevious` / `withPrevious` | 6 |
| `repeat=<int>` / `repeat=indefinite` | 7 |
| `autoReverse=true` | 7 |
| `restart=whenNotActive` | 7 |
| `path=` preset motion + `d=` custom | 5 |
| `transition=` (fade, wipe, push, zoom, split, reveal) | 17 |
## Inspect the generated file
```bash
officecli query animations.pptx animation
officecli get animations.pptx /slide[2]/shape[3]/animation[1]
officecli get animations.pptx /slide[6]/shape[5]/animation[1]
officecli get animations.pptx /slide[7]/shape[4]/animation[1]
```