rikiki-deck 0.6.0 → 0.7.2
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/.claude/skills/rikiki-debug/SKILL.md +17 -7
- package/.claude/skills/rikiki-deck/SKILL.md +362 -77
- package/.claude/skills/rikiki-theme/SKILL.md +1 -1
- package/README.md +69 -50
- package/bin/lib/assemble.mjs +154 -0
- package/bin/lib/box-geometry.mjs +66 -0
- package/bin/lib/browser.mjs +302 -0
- package/bin/lib/check-api.d.ts +28 -0
- package/bin/lib/check-api.mjs +6 -0
- package/bin/lib/check-plugins.mjs +228 -0
- package/bin/lib/check.mjs +1347 -0
- package/bin/lib/cli-error.mjs +26 -0
- package/bin/lib/component-deps.mjs +69 -0
- package/bin/lib/diff.mjs +275 -0
- package/bin/lib/export-pdf.mjs +65 -0
- package/bin/lib/graph-hit.mjs +86 -0
- package/bin/lib/inline.mjs +137 -39
- package/bin/lib/narrative.mjs +77 -0
- package/bin/lib/prune-icons.mjs +104 -0
- package/bin/lib/render.mjs +195 -0
- package/bin/lib/scan-external.mjs +126 -0
- package/bin/lib/starter.mjs +27 -14
- package/bin/lib/visual.mjs +120 -0
- package/bin/rikiki.mjs +420 -35
- package/dist/annotation-marks.d.ts +60 -0
- package/dist/annotation-marks.js +1 -0
- package/dist/bar-segments.d.ts +28 -0
- package/dist/bar-segments.js +1 -0
- package/dist/browser-location.d.ts +3 -0
- package/dist/browser-location.js +1 -0
- package/dist/cards-syntax.d.ts +31 -0
- package/dist/cards-syntax.js +6 -0
- package/dist/{plugins/click-stages.d.ts → click-stages.d.ts} +1 -1
- package/dist/deck-agenda.d.ts +25 -0
- package/dist/deck-agenda.js +6 -0
- package/dist/deck-annotate.d.ts +108 -0
- package/dist/deck-annotate.js +18 -0
- package/dist/deck-bar.d.ts +32 -0
- package/dist/deck-bar.js +19 -0
- package/dist/deck-bento.d.ts +38 -0
- package/dist/deck-bento.js +4 -0
- package/dist/{molecules/deck-callout.d.ts → deck-callout.d.ts} +2 -0
- package/dist/deck-callout.js +1 -1
- package/dist/deck-cell.d.ts +19 -0
- package/dist/deck-cell.js +1 -0
- package/dist/deck-checklist.d.ts +20 -0
- package/dist/deck-checklist.js +1 -0
- package/dist/{layouts/deck-cover.d.ts → deck-cover.d.ts} +8 -0
- package/dist/deck-cover.js +9 -6
- package/dist/deck-csv.d.ts +38 -0
- package/dist/deck-csv.js +15 -0
- package/dist/deck-feature-cards.js +2 -2
- package/dist/deck-feature.d.ts +18 -0
- package/dist/deck-feature.js +2 -2
- package/dist/deck-figure.d.ts +26 -0
- package/dist/deck-figure.js +8 -0
- package/dist/deck-fit.d.ts +14 -0
- package/dist/deck-fit.js +1 -0
- package/dist/deck-flow.d.ts +41 -0
- package/dist/deck-flow.js +7 -0
- package/dist/deck-graph.d.ts +92 -0
- package/dist/deck-graph.js +25 -0
- package/dist/deck-grid.js +1 -1
- package/dist/deck-icon.d.ts +20 -0
- package/dist/deck-icon.js +1 -0
- package/dist/{atoms/deck-kicker.d.ts → deck-kicker.d.ts} +5 -0
- package/dist/deck-kicker.js +1 -1
- package/dist/deck-kpi-grid.d.ts +26 -0
- package/dist/deck-kpi-grid.js +4 -0
- package/dist/deck-link.d.ts +21 -0
- package/dist/deck-link.js +1 -0
- package/dist/{molecules/deck-md.d.ts → deck-md.d.ts} +3 -0
- package/dist/deck-md.js +8 -3
- package/dist/deck-mermaid.js +15 -3
- package/dist/deck-outline.d.ts +50 -0
- package/dist/deck-outline.js +1 -0
- package/dist/deck-overview.js +53 -39
- package/dist/deck-persona.d.ts +31 -0
- package/dist/deck-persona.js +6 -0
- package/dist/deck-photo.js +1 -1
- package/dist/deck-point.d.ts +22 -0
- package/dist/deck-point.js +1 -0
- package/dist/deck-presenter.js +120 -48
- package/dist/deck-pull.d.ts +13 -0
- package/dist/deck-pull.js +1 -0
- package/dist/{atoms/deck-punch.d.ts → deck-punch.d.ts} +6 -0
- package/dist/deck-punch.js +1 -1
- package/dist/deck-quote.d.ts +28 -0
- package/dist/deck-quote.js +6 -0
- package/dist/{runtime/deck-root.d.ts → deck-root.d.ts} +88 -8
- package/dist/deck-root.js +17 -13
- package/dist/deck-section.js +2 -2
- package/dist/deck-source.d.ts +12 -0
- package/dist/deck-source.js +2 -0
- package/dist/deck-split.d.ts +30 -0
- package/dist/deck-split.js +5 -3
- package/dist/{molecules/deck-stat.d.ts → deck-stat.d.ts} +2 -0
- package/dist/deck-stat.js +2 -2
- package/dist/{molecules/deck-step-list.d.ts → deck-step-list.d.ts} +8 -0
- package/dist/deck-step-list.js +4 -2
- package/dist/deck-table.d.ts +26 -0
- package/dist/deck-table.js +1 -0
- package/dist/deck-takeaway.d.ts +18 -0
- package/dist/deck-takeaway.js +2 -2
- package/dist/deck-timeline.d.ts +37 -0
- package/dist/deck-timeline.js +5 -0
- package/dist/deck-transition.js +3 -3
- package/dist/deck-versus.d.ts +18 -0
- package/dist/deck-versus.js +9 -0
- package/dist/deep-link.d.ts +29 -0
- package/dist/deep-link.js +1 -0
- package/dist/escape-html.d.ts +3 -0
- package/dist/escape-html.js +1 -0
- package/dist/fit-controller.d.ts +27 -0
- package/dist/fit-controller.js +1 -0
- package/dist/graph-layout.d.ts +35 -0
- package/dist/graph-layout.js +1 -0
- package/dist/grid-tracks.d.ts +17 -0
- package/dist/grid-tracks.js +1 -0
- package/dist/icon-set.d.ts +6 -0
- package/dist/icon-set.js +1 -0
- package/dist/index.d.ts +37 -31
- package/dist/index.js +95 -49
- package/dist/keymap.d.ts +40 -0
- package/dist/keymap.js +1 -0
- package/dist/mouse-nav.d.ts +12 -0
- package/dist/mouse-nav.js +1 -0
- package/dist/navigation.d.ts +25 -0
- package/dist/navigation.js +1 -0
- package/dist/parse-csv.d.ts +9 -0
- package/dist/parse-csv.js +3 -0
- package/dist/shared-styles.js +1 -1
- package/dist/shiki.d.ts +8 -0
- package/dist/signature.d.ts +2 -0
- package/dist/signature.js +1 -0
- package/dist/slide-fill.d.ts +8 -0
- package/dist/slide-fill.js +1 -0
- package/dist/standalone.js +301 -169
- package/dist/vendor/THIRD-PARTY-NOTICES.txt +4347 -0
- package/dist/vendor/inventory.json +3029 -0
- package/dist/vendor/lit.js +62 -2
- package/dist/vendor/mermaid.min.js +95 -95
- package/dist/vendor/shiki.js +1 -57
- package/dist/viewport.d.ts +42 -0
- package/dist/viewport.js +1 -0
- package/docs/llms/rikiki-reference.md +955 -64
- package/docs/llms/rikiki-workflow.md +536 -0
- package/llms.txt +39 -12
- package/package.json +33 -12
- package/themes/rikiki.css +173 -47
- package/themes/siliceum.css +171 -51
- package/dist/layouts/deck-feature.d.ts +0 -11
- package/dist/layouts/deck-split.d.ts +0 -18
- package/dist/layouts/deck-takeaway.d.ts +0 -11
- package/dist/plugins/shiki.d.ts +0 -8
- /package/dist/{runtime/color.d.ts → color.d.ts} +0 -0
- /package/dist/{atoms/deck-badge.d.ts → deck-badge.d.ts} +0 -0
- /package/dist/{molecules/deck-card.d.ts → deck-card.d.ts} +0 -0
- /package/dist/{atoms/deck-code-highlighter.d.ts → deck-code-highlighter.d.ts} +0 -0
- /package/dist/{atoms/deck-code.d.ts → deck-code.d.ts} +0 -0
- /package/dist/{layouts/deck-feature-cards.d.ts → deck-feature-cards.d.ts} +0 -0
- /package/dist/{molecules/deck-grid.d.ts → deck-grid.d.ts} +0 -0
- /package/dist/{runtime/deck-help.d.ts → deck-help.d.ts} +0 -0
- /package/dist/{molecules/deck-mermaid.d.ts → deck-mermaid.d.ts} +0 -0
- /package/dist/{molecules/deck-metric.d.ts → deck-metric.d.ts} +0 -0
- /package/dist/{runtime/deck-notes.d.ts → deck-notes.d.ts} +0 -0
- /package/dist/{runtime/deck-overview.d.ts → deck-overview.d.ts} +0 -0
- /package/dist/{layouts/deck-photo.d.ts → deck-photo.d.ts} +0 -0
- /package/dist/{runtime/deck-presenter.d.ts → deck-presenter.d.ts} +0 -0
- /package/dist/{layouts/deck-section.d.ts → deck-section.d.ts} +0 -0
- /package/dist/{molecules/deck-shortcut.d.ts → deck-shortcut.d.ts} +0 -0
- /package/dist/{molecules/deck-stack.d.ts → deck-stack.d.ts} +0 -0
- /package/dist/{molecules/deck-tier-list.d.ts → deck-tier-list.d.ts} +0 -0
- /package/dist/{runtime/deck-transition.d.ts → deck-transition.d.ts} +0 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
# Writing a deck with an agent · the working guide
|
|
2
|
+
|
|
3
|
+
This is the short path from a brief to a file someone can present. It is
|
|
4
|
+
written for an agent driving `rikiki-deck` from an install, and it assumes no
|
|
5
|
+
particular tool beyond a shell and a browser.
|
|
6
|
+
|
|
7
|
+
Read this end to end once. After that, jump to the step you are on.
|
|
8
|
+
|
|
9
|
+
The exhaustive tag, attribute and token tables are in
|
|
10
|
+
[`rikiki-reference.md`](./rikiki-reference.md); this guide says when to reach
|
|
11
|
+
for them. What makes a slide worth projecting is §14 there, and it is the one
|
|
12
|
+
section to read before writing any content.
|
|
13
|
+
|
|
14
|
+
## Work as a pipeline
|
|
15
|
+
|
|
16
|
+
The reliable unit is a handoff, not a prompt that asks one agent to write and
|
|
17
|
+
judge a complete deck. Use these passes when you can delegate them:
|
|
18
|
+
|
|
19
|
+
| Pass | Produces | Must not do |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| Planner | contract, fact ledger, slide plan | write HTML or fill unknown facts |
|
|
22
|
+
| Writer | HTML and speaker notes | add claims outside the ledger |
|
|
23
|
+
| Content critic | story and evidence findings | edit the deck |
|
|
24
|
+
| Visual critic | image based findings for every state | approve its own changes |
|
|
25
|
+
| Integrator | corrected deck and final report | hide unresolved findings |
|
|
26
|
+
|
|
27
|
+
Keep the artifacts in a temporary work directory. The slide plan is the
|
|
28
|
+
handoff: one row per slide with `id`, room question, claim, evidence,
|
|
29
|
+
composition, source and note purpose. The fact ledger lists every number,
|
|
30
|
+
quote, date and external asset with its source or `TODO`. If delegation is not
|
|
31
|
+
available, perform the same passes sequentially and save the artifacts before
|
|
32
|
+
moving on. The writer and critics must not be the same pass, even when they are
|
|
33
|
+
the same model.
|
|
34
|
+
|
|
35
|
+
Critics report `blocker`, `fix` or `choice`, each tied to a slide id. The
|
|
36
|
+
integrator resolves blockers first, then fixes, and leaves choices that alter
|
|
37
|
+
the argument or tone for the user. Any structural change starts another
|
|
38
|
+
content and visual review.
|
|
39
|
+
|
|
40
|
+
A small handoff directory is enough:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
deck-work/
|
|
44
|
+
contract.md audience, decision, duration, acceptance
|
|
45
|
+
facts.md allowed claims, values, sources, TODOs, assets
|
|
46
|
+
plan.md one row per slide, in order
|
|
47
|
+
content-review.md findings keyed by slide id
|
|
48
|
+
visual-review.md findings keyed by slide id and render state
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Each pass ends with a short status line (`PLAN_READY`, `DECK_WRITTEN`,
|
|
52
|
+
`CONTENT_REVIEWED`, `VISUAL_REVIEWED` or `DELIVERY_READY`) and a list of open
|
|
53
|
+
findings. This gives the next agent a stopping point and makes an incomplete
|
|
54
|
+
run visible instead of turning silence into approval.
|
|
55
|
+
|
|
56
|
+
Use these boundaries in the agent prompts:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
PLANNER: You may inspect the brief and its sources. Produce contract.md,
|
|
60
|
+
facts.md and plan.md. Do not write HTML. Mark unknowns TODO. End PLAN_READY.
|
|
61
|
+
|
|
62
|
+
WRITER: Read only contract.md, facts.md, plan.md and the component reference.
|
|
63
|
+
Write the deck and notes. Do not add facts or change slide ids. End
|
|
64
|
+
DECK_WRITTEN with a list of TODOs and files changed.
|
|
65
|
+
|
|
66
|
+
CONTENT CRITIC: Read contract.md, facts.md, plan.md and the deck. Do not edit.
|
|
67
|
+
Check argument, title sequence, evidence, sources, notes and duration. Return
|
|
68
|
+
findings as [severity, slide id, evidence, proposed action]. End
|
|
69
|
+
CONTENT_REVIEWED.
|
|
70
|
+
|
|
71
|
+
VISUAL CRITIC: Read the rendered images and manifest, including reveal states.
|
|
72
|
+
Do not edit. Check hierarchy, density, alignment, balance, legibility and
|
|
73
|
+
whether the evidence is visible. Return [severity, slide id/state, observation,
|
|
74
|
+
proposed action]. End VISUAL_REVIEWED.
|
|
75
|
+
|
|
76
|
+
INTEGRATOR: Apply blocker and fix findings that do not change the user's
|
|
77
|
+
argument or tone. Leave choices visible. Run check and render for the whole
|
|
78
|
+
deck. End DELIVERY_READY only when no blocker or TODO remains.
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The prompt is a boundary, not a substitute for judgment: the critic must cite
|
|
82
|
+
the artifact or rendered state that supports a finding, and the integrator must
|
|
83
|
+
keep an unresolved choice visible rather than silently deciding it.
|
|
84
|
+
|
|
85
|
+
**The seven steps**
|
|
86
|
+
|
|
87
|
+
1. [Fill the gaps in the brief](#1--fill-the-gaps-in-the-brief)
|
|
88
|
+
2. [Propose a plan](#2--propose-a-plan)
|
|
89
|
+
3. [Choose the compositions](#3--choose-the-compositions)
|
|
90
|
+
4. [Write the slides](#4--write-the-slides)
|
|
91
|
+
5. [Render and check](#5--render-and-check)
|
|
92
|
+
6. [Fix](#6--fix)
|
|
93
|
+
7. [Deliver](#7--deliver)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 1 · Fill the gaps in the brief
|
|
98
|
+
|
|
99
|
+
Before writing a single slide, write down the editorial contract. It is nine
|
|
100
|
+
lines and it decides everything after it.
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
- Audience: who is in the room, and what they already know
|
|
104
|
+
- Decision: what they should do, decide or understand differently
|
|
105
|
+
- Duration: minutes, which caps the slide count
|
|
106
|
+
- Language: the deck's language, which sets `<html lang>`
|
|
107
|
+
- Context: projected, read alone, or both
|
|
108
|
+
- Theme: rikiki, siliceum, or a constraint from a brand
|
|
109
|
+
- Sources: what you were given, and what is quotable from it
|
|
110
|
+
- Missing: what you had to ask for or assume
|
|
111
|
+
- Acceptance: what must be true for the deck to be useful
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Ask for what is missing rather than inventing it. If asking is not possible,
|
|
115
|
+
write the assumption into `Missing:` and carry it into the deck's notes, so the
|
|
116
|
+
person presenting knows what to verify before standing up.
|
|
117
|
+
|
|
118
|
+
**Duration is measured in words, not in slides.** The slide count is a poor
|
|
119
|
+
proxy: nine light slides fill ten minutes, nine dense ones fill thirty. Speech
|
|
120
|
+
runs at 130 to 160 words a minute at a normal pace, and public speaking on
|
|
121
|
+
technical material sits nearer 100 to 120. So a twenty-minute talk is roughly
|
|
122
|
+
2,400 spoken words, and those words live in `<deck-notes>`, not on the slides.
|
|
123
|
+
|
|
124
|
+
Write the notes as what you would say, and `rikiki check` will compare their
|
|
125
|
+
length to the `duration` on the cover. It reports the gap as an estimate, never
|
|
126
|
+
as a verdict: what a speaker adds around a slide is not in the file.
|
|
127
|
+
|
|
128
|
+
**Never invent a number, a quotation or a source.** Not a rounded figure, not a
|
|
129
|
+
plausible date, not an attribution. If the brief gives you a number, use it
|
|
130
|
+
exactly and keep where it came from in `<deck-notes>`. If a slide needs a figure
|
|
131
|
+
you were not given, mark it in the deck itself:
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<deck-stat num="TODO" tone="orange">
|
|
135
|
+
<h3 slot="claim">conversion rate</h3>
|
|
136
|
+
to confirm with the data team before the talk
|
|
137
|
+
</deck-stat>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
A visible gap gets filled before the talk. An invented number gets presented.
|
|
141
|
+
|
|
142
|
+
## 2 · Propose a plan
|
|
143
|
+
|
|
144
|
+
Give the talk a shape before giving it slides. The one that carries a technical
|
|
145
|
+
argument alternates between what is and what could be: the situation, then the
|
|
146
|
+
gap, then what closes it, tightening until the last slide only has to name the
|
|
147
|
+
action. Each return to "what is" costs the audience nothing and buys the next
|
|
148
|
+
claim.
|
|
149
|
+
|
|
150
|
+
Three columns, before any HTML:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
# The question the room is asking here → What this slide answers → With what
|
|
154
|
+
2 Why should I care? Deploys fail on Friday the CI graph
|
|
155
|
+
3 What causes it? Nothing gates the tag the pipeline rules
|
|
156
|
+
4 What would fix it? Before / after two columns
|
|
157
|
+
5 What do I do Monday? Gate the tag the takeaway
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**A slide that answers no open question is cut or moved.** That single check
|
|
161
|
+
removes the "while we're at it" slides a subject list always grows. And a
|
|
162
|
+
question still open at the end needs a slide: if nothing answers "what do I do
|
|
163
|
+
Monday", the deck has no ending.
|
|
164
|
+
|
|
165
|
+
Two shapes cover almost every technical talk. Pick one and keep it.
|
|
166
|
+
|
|
167
|
+
- **Situation, complication, question, answer** · the shared ground, what
|
|
168
|
+
disrupts it, the question that follows, your answer with its support.
|
|
169
|
+
Minto's structure, and the one that carries a recommendation best.
|
|
170
|
+
- **What is, what could be** · alternate present and possible, each return to
|
|
171
|
+
"what is" buying the next claim.
|
|
172
|
+
|
|
173
|
+
**Read the titles in sequence, aloud, before writing any body.** They must form
|
|
174
|
+
a text that stands on its own. A title that names a subject rather than a claim
|
|
175
|
+
breaks the chain; a title you could move without loss means there is no story.
|
|
176
|
+
`rikiki render` writes the titles into its manifest, so the same test runs on a
|
|
177
|
+
deck already written.
|
|
178
|
+
|
|
179
|
+
Before HTML, freeze the plan and fact ledger. A plan row is complete only when
|
|
180
|
+
the evidence earns the claim and the source is known. A component name,
|
|
181
|
+
decorative idea or topic label is not evidence. The writer is allowed to turn
|
|
182
|
+
the plan into markup, shorten wording and choose a documented variant; it is
|
|
183
|
+
not allowed to invent a fact to make a slide feel complete.
|
|
184
|
+
|
|
185
|
+
## 3 · Choose the compositions
|
|
186
|
+
|
|
187
|
+
Pick per slide, from the intent, not from the tag you remember. The recipes are
|
|
188
|
+
in [§Recipes](#recipes) below. When two fit, take the one with fewer elements.
|
|
189
|
+
|
|
190
|
+
## 4 · Write the slides
|
|
191
|
+
|
|
192
|
+
Start from a real file:
|
|
193
|
+
|
|
194
|
+
```sh
|
|
195
|
+
npx rikiki init talk.html --title "…" --theme rikiki
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
That writes an editable deck and copies the runtime beside it. Then edit the
|
|
199
|
+
HTML directly. Two rules that save a rewrite:
|
|
200
|
+
|
|
201
|
+
- **Give every slide a stable `id`.** `<deck-feature id="ci-gate">`. It is how
|
|
202
|
+
`render` selects it, how `check` reports it, and how you edit one slide later
|
|
203
|
+
without touching the rest.
|
|
204
|
+
- **An attribute a component does not read is dropped in silence.** `deck-stat`
|
|
205
|
+
takes `num` and its words as content; writing `label="…"` on it loses the
|
|
206
|
+
label with no error anywhere. `check` reports these as `UNKNOWN_ATTRIBUTE`,
|
|
207
|
+
and the reference tables say what each element accepts.
|
|
208
|
+
- **Put detail in `<deck-notes>`, not on the slide.** The presenter window (`P`)
|
|
209
|
+
shows them, the projector does not. Sources, figures to verify and the
|
|
210
|
+
sentence you would say belong there.
|
|
211
|
+
|
|
212
|
+
Write one slide at a time from its plan row, then check the row against the
|
|
213
|
+
HTML before moving on. Keep the planned `id`, claim and evidence visible in the
|
|
214
|
+
working notes. This prevents a late slide from becoming a second conclusion or
|
|
215
|
+
from quietly changing the argument because a component was easier to fill.
|
|
216
|
+
|
|
217
|
+
## 5 · Render and check
|
|
218
|
+
|
|
219
|
+
Never claim a deck works without having looked at it.
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
npx rikiki check talk.html # what is wrong, where, and what to try
|
|
223
|
+
npx rikiki render talk.html # one picture per slide + a gallery
|
|
224
|
+
npx rikiki render talk.html --steps # each revealed state, not just the first
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
`check` exits 0 when nothing blocks, 1 on defects, 2 when it could not look at
|
|
228
|
+
the deck at all. Read the pictures too: `check` measures, it does not judge. A
|
|
229
|
+
green report on an ugly slide is still an ugly slide.
|
|
230
|
+
|
|
231
|
+
Run a content review before the visual review. The content review reads the
|
|
232
|
+
contract, plan, title sequence and notes and asks whether each slide answers an
|
|
233
|
+
open question, whether each claim has evidence, whether every factual item is
|
|
234
|
+
in the ledger, and whether the notes sound spoken rather than projected.
|
|
235
|
+
|
|
236
|
+
The visual review reads the rendered images, including every `--steps` state.
|
|
237
|
+
Look for one focal point, a readable title, a coherent alignment axis, useful
|
|
238
|
+
occupation of the canvas, and diagrams or images that can be understood at the
|
|
239
|
+
intended distance. Record findings with slide ids and concrete changes; do not
|
|
240
|
+
silently rewrite while reviewing. After integration, run `check` and render the
|
|
241
|
+
whole deck again.
|
|
242
|
+
|
|
243
|
+
Read what the report says it did **not** check. It does not read your wording,
|
|
244
|
+
your figures or your argument. Those are yours.
|
|
245
|
+
|
|
246
|
+
## 6 · Fix
|
|
247
|
+
|
|
248
|
+
When a slide is too full, try these in order and stop at the first that works.
|
|
249
|
+
The order matters: the early moves keep the deck's shape, the late ones change
|
|
250
|
+
it.
|
|
251
|
+
|
|
252
|
+
1. **Cut the repetition.** The title already says it; the body does not have to.
|
|
253
|
+
2. **Shorten.** Sentences to clauses, clauses to words.
|
|
254
|
+
3. **Move detail into `<deck-notes>`.** It is still said, just not projected.
|
|
255
|
+
4. **Split the slide.** Two slides with one idea each beat one with two.
|
|
256
|
+
5. **Change the composition.** A list that will not fit is often a comparison, a
|
|
257
|
+
flow, or a single number.
|
|
258
|
+
6. **Adjust the type,** last and within the readable floor. Below the floor the
|
|
259
|
+
back row loses the line, which is worse than a split.
|
|
260
|
+
|
|
261
|
+
**Edit narrowly.** A request about one slide changes that slide. Keep the ids
|
|
262
|
+
stable, leave the others byte for byte, and re-run `check` on the whole deck
|
|
263
|
+
afterwards to be sure the edit did not move anything else.
|
|
264
|
+
|
|
265
|
+
## 7 · Deliver
|
|
266
|
+
|
|
267
|
+
Three shapes, three audiences:
|
|
268
|
+
|
|
269
|
+
```sh
|
|
270
|
+
npx rikiki bundle talk.html # one HTML file · opens offline, anywhere
|
|
271
|
+
npx rikiki export talk.html # PDF, one page per slide
|
|
272
|
+
# the source folder itself # for whoever will edit it next
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
The bundle needs `rolldown`, the PDF needs `playwright`; both are optional peers
|
|
276
|
+
and both say so when missing. `bundle` exits non-zero if the result would still
|
|
277
|
+
fetch anything, so a file it accepts really opens on a plane.
|
|
278
|
+
|
|
279
|
+
Before handing over: run `check` one last time, open the PDF, and say what you
|
|
280
|
+
did not verify.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Recipes
|
|
285
|
+
|
|
286
|
+
Nine compositions by intent. Each says what it is for, what to put in it, how
|
|
287
|
+
much fits, what the notes carry, when to split, and one variant. Every HTML
|
|
288
|
+
block below is checked by the repository's test suite, so it is copy-paste
|
|
289
|
+
correct, but the words in it are placeholders: replace them with the brief's.
|
|
290
|
+
|
|
291
|
+
The house style behind all of them: the title states the message in a full
|
|
292
|
+
sentence, the body is the evidence, one loud thing per slide.
|
|
293
|
+
|
|
294
|
+
That is the assertion-evidence structure, and it is here because it was
|
|
295
|
+
measured, not because it reads better. Against the usual topic headline over a
|
|
296
|
+
bullet list, audiences understood and remembered more, with the difference
|
|
297
|
+
statistically significant; a later study on 110 engineering students found the
|
|
298
|
+
same, plus fewer misconceptions, lower perceived cognitive load and stronger
|
|
299
|
+
recall at a delayed test. It is the slide-level form of Mayer's multimedia
|
|
300
|
+
principles: one channel per idea, nothing on the slide that does not serve it,
|
|
301
|
+
words beside the thing they describe.
|
|
302
|
+
|
|
303
|
+
Two consequences worth stating plainly:
|
|
304
|
+
|
|
305
|
+
- **A bullet list read aloud is worse than no slide.** The audience reads and
|
|
306
|
+
listens to the same words at once, which the redundancy principle predicts
|
|
307
|
+
will cost them, and the studies above measured.
|
|
308
|
+
- **Cutting is a design act.** Removing what does not serve the claim improves
|
|
309
|
+
comprehension on its own · that is the coherence principle, and it is the
|
|
310
|
+
cheapest edit available.
|
|
311
|
+
|
|
312
|
+
Reference §14 carries the projection-specific rules that follow from this.
|
|
313
|
+
|
|
314
|
+
### 1 · Assertion and proof
|
|
315
|
+
|
|
316
|
+
**For:** the default content slide. A claim, and the thing that makes it true.
|
|
317
|
+
|
|
318
|
+
```html
|
|
319
|
+
<deck-feature id="ci-gate" eyebrow="Delivery">
|
|
320
|
+
<h1 slot="title">A tag that publishes runs fewer checks than a branch push</h1>
|
|
321
|
+
<deck-callout type="warn">
|
|
322
|
+
On a tag pipeline the branch variable is empty, so only the publish job runs.
|
|
323
|
+
</deck-callout>
|
|
324
|
+
<deck-notes>Source: the pipeline definition, job rules. Say the consequence out loud.</deck-notes>
|
|
325
|
+
</deck-feature>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Fits:** one claim, one block of proof, three lines at most in it.
|
|
329
|
+
**Notes:** the source, and the sentence you would add if asked.
|
|
330
|
+
**Split when:** the proof needs two blocks. Two claims are two slides.
|
|
331
|
+
**Variant:** swap the callout for a `<deck-code>` when the proof is code.
|
|
332
|
+
|
|
333
|
+
### 2 · Comparison
|
|
334
|
+
|
|
335
|
+
**For:** two options, two states, before and after.
|
|
336
|
+
|
|
337
|
+
```html
|
|
338
|
+
<deck-split id="before-after" eyebrow="Migration">
|
|
339
|
+
<h1 slot="title">Moving the gate to the tag removes the only unchecked path</h1>
|
|
340
|
+
<deck-card slot="left" color="grey">
|
|
341
|
+
<h3>Before</h3>
|
|
342
|
+
<p>The tag publishes on 61 unit tests.</p>
|
|
343
|
+
</deck-card>
|
|
344
|
+
<deck-card slot="right" color="green">
|
|
345
|
+
<h3>After</h3>
|
|
346
|
+
<p>The tag runs what a branch push runs.</p>
|
|
347
|
+
</deck-card>
|
|
348
|
+
</deck-split>
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
**Fits:** two columns, one heading and two lines each. Never three columns of
|
|
352
|
+
prose; the eye compares two things, not three.
|
|
353
|
+
**Notes:** what the comparison costs, which never fits on the slide.
|
|
354
|
+
**Split when:** each side needs its own evidence. Then it is two assertion
|
|
355
|
+
slides and a takeaway.
|
|
356
|
+
**Variant:** `<deck-feature-cards>` for three short parallel items where nothing
|
|
357
|
+
is being weighed against anything.
|
|
358
|
+
|
|
359
|
+
### 3 · One number, and what it means
|
|
360
|
+
|
|
361
|
+
**For:** a figure that carries the slide on its own.
|
|
362
|
+
|
|
363
|
+
```html
|
|
364
|
+
<deck-feature id="drift" eyebrow="Measured" spread="center">
|
|
365
|
+
<h1 slot="title">Nine tracked files drifted from their sources on a clean build</h1>
|
|
366
|
+
<deck-stat num="9" tone="orange">
|
|
367
|
+
<h3 slot="claim">files rebuilt differently</h3>
|
|
368
|
+
plus one that was never committed at all
|
|
369
|
+
</deck-stat>
|
|
370
|
+
<deck-notes>Measured on a clean tree, 2026-09-08. The tenth file is the deck-point declaration.</deck-notes>
|
|
371
|
+
</deck-feature>
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Fits:** one number. A second number on the same slide halves the first one's
|
|
375
|
+
weight.
|
|
376
|
+
**Notes:** how it was measured, and when. A figure with no method is a rumour.
|
|
377
|
+
**Split when:** you have three numbers. That is a `deck-kpi-grid`, or three
|
|
378
|
+
slides if each deserves a sentence.
|
|
379
|
+
**Variant:** `<deck-punch>` when the point is a phrase rather than a figure.
|
|
380
|
+
|
|
381
|
+
### 4 · A process
|
|
382
|
+
|
|
383
|
+
**For:** ordered stages, where the shape is half the message.
|
|
384
|
+
|
|
385
|
+
```html
|
|
386
|
+
<deck-feature id="loop" eyebrow="Workflow" spread="center">
|
|
387
|
+
<h1 slot="title">Every deck goes through the same four gestures</h1>
|
|
388
|
+
<deck-step-list>
|
|
389
|
+
<deck-step n="1">Write the HTML</deck-step>
|
|
390
|
+
<deck-step n="2">Render and check</deck-step>
|
|
391
|
+
<deck-step n="3">Fix what it names</deck-step>
|
|
392
|
+
<deck-step n="4">Bundle or export</deck-step>
|
|
393
|
+
</deck-step-list>
|
|
394
|
+
</deck-feature>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Fits:** three to five stages, four words each.
|
|
398
|
+
**Notes:** what happens between the stages.
|
|
399
|
+
**Split when:** a stage needs a sentence. Give it its own slide and keep the
|
|
400
|
+
list as the map.
|
|
401
|
+
**Variant:** `<deck-flow>` (opt-in, one script tag) when the stages should
|
|
402
|
+
reveal one at a time under `steps`.
|
|
403
|
+
|
|
404
|
+
### 5 · Code, explained
|
|
405
|
+
|
|
406
|
+
**For:** the line that matters, not the file it lives in.
|
|
407
|
+
|
|
408
|
+
```html
|
|
409
|
+
<deck-feature id="peer" eyebrow="Packaging">
|
|
410
|
+
<h1 slot="title">The bundler loads on first use, so an install never pays for it</h1>
|
|
411
|
+
<deck-code lang="ts" hero>
|
|
412
|
+
async function loadRolldown() {
|
|
413
|
+
try {
|
|
414
|
+
return (await import('rolldown')).rolldown;
|
|
415
|
+
} catch {
|
|
416
|
+
throw new ExpectedError('install it next to rikiki-deck: npm i -D rolldown');
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
</deck-code>
|
|
420
|
+
<deck-notes>~55 MB of native bindings · optional peer, reported when missing.</deck-notes>
|
|
421
|
+
</deck-feature>
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**Fits:** eight to twelve lines. Past that nobody reads it, they wait for you to
|
|
425
|
+
explain it.
|
|
426
|
+
**Notes:** the part you will say instead of reading the code aloud.
|
|
427
|
+
**Split when:** two functions. Show the call site on one slide, the body on the
|
|
428
|
+
next, and use `data-morph` if you want them to connect.
|
|
429
|
+
**Variant:** `step-groups` on `<deck-code>` to walk through the same block line
|
|
430
|
+
group by line group.
|
|
431
|
+
|
|
432
|
+
### 6 · An architecture
|
|
433
|
+
|
|
434
|
+
**For:** how the parts sit together. Boxes and arrows, never paragraphs.
|
|
435
|
+
|
|
436
|
+
```html
|
|
437
|
+
<deck-feature id="layers" eyebrow="Architecture" spread="center">
|
|
438
|
+
<h1 slot="title">The commands share one browser layer and own none of it</h1>
|
|
439
|
+
<deck-mermaid>graph LR
|
|
440
|
+
CLI[rikiki CLI] --> B[browser layer]
|
|
441
|
+
B --> R[render]
|
|
442
|
+
B --> C[check]
|
|
443
|
+
B --> E[export]</deck-mermaid>
|
|
444
|
+
<deck-notes>Lazy Playwright, a local server, the settle, and closing both on the way out.</deck-notes>
|
|
445
|
+
</deck-feature>
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Fits:** five to seven boxes. A diagram nobody can read in five seconds is a
|
|
449
|
+
handout, not a slide, and `check` reports in pixels when one stops fitting.
|
|
450
|
+
**Notes:** the boundary the diagram cannot draw.
|
|
451
|
+
**Split when:** the diagram has layers. Show the shape first, then one layer per
|
|
452
|
+
slide.
|
|
453
|
+
**Variant:** a screenshot with `<deck-annotate>` markers when the subject is a
|
|
454
|
+
real interface rather than a structure.
|
|
455
|
+
|
|
456
|
+
`<deck-mermaid>` needs the mermaid runtime: `rikiki init --with-mermaid`, or
|
|
457
|
+
`rikiki bundle --with-mermaid` when folding the deck into one file.
|
|
458
|
+
|
|
459
|
+
### 7 · Change over time
|
|
460
|
+
|
|
461
|
+
**For:** what moved, and in which direction.
|
|
462
|
+
|
|
463
|
+
```html
|
|
464
|
+
<deck-feature id="weight" eyebrow="Before / after">
|
|
465
|
+
<h1 slot="title">Naming the published assets cut the site from 400 MB to 14</h1>
|
|
466
|
+
<deck-metric-list>
|
|
467
|
+
<deck-metric value="14.3 MB">Published site, down from 400 MB</deck-metric>
|
|
468
|
+
<deck-metric value="7 entries">What a browser is allowed to fetch</deck-metric>
|
|
469
|
+
</deck-metric-list>
|
|
470
|
+
<deck-notes>The old build copied the sources, the fixtures and 366 MB of dependencies.</deck-notes>
|
|
471
|
+
</deck-feature>
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**Fits:** two or three rows. A table of eight belongs in the notes or a handout.
|
|
475
|
+
**Notes:** what the change cost, and what it did not fix.
|
|
476
|
+
**Split when:** the trend needs a curve. That is an image, and it gets a slide.
|
|
477
|
+
**Variant:** `<deck-bar>` (opt-in) when a proportion, rather than a delta, is the
|
|
478
|
+
point.
|
|
479
|
+
|
|
480
|
+
### 8 · A decision and its trade-off
|
|
481
|
+
|
|
482
|
+
**For:** the choice made, and what was given up for it.
|
|
483
|
+
|
|
484
|
+
```html
|
|
485
|
+
<deck-split id="decision" eyebrow="Decision">
|
|
486
|
+
<h1 slot="title">We ship the assembler rather than drop it from the reference</h1>
|
|
487
|
+
<deck-card slot="left" color="green">
|
|
488
|
+
<h3>What we gain</h3>
|
|
489
|
+
<p>A documented command a consumer can actually run.</p>
|
|
490
|
+
</deck-card>
|
|
491
|
+
<deck-card slot="right" color="grey">
|
|
492
|
+
<h3>What it costs</h3>
|
|
493
|
+
<p>One more public surface to keep working.</p>
|
|
494
|
+
</deck-card>
|
|
495
|
+
<deck-notes>Alternative considered: delete the section. Rejected, the feature is useful.</deck-notes>
|
|
496
|
+
</deck-split>
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Fits:** one decision, one gain, one cost.
|
|
500
|
+
**Notes:** the alternatives you rejected, and why. That is the question you will
|
|
501
|
+
be asked.
|
|
502
|
+
**Split when:** there are three options. Compare them on one slide, then decide
|
|
503
|
+
on the next.
|
|
504
|
+
**Variant:** `<deck-checklist>` when the decision is a set of criteria rather
|
|
505
|
+
than a trade.
|
|
506
|
+
|
|
507
|
+
### 9 · The close
|
|
508
|
+
|
|
509
|
+
**For:** the last slide. What you want them to do.
|
|
510
|
+
|
|
511
|
+
```html
|
|
512
|
+
<deck-takeaway id="close">
|
|
513
|
+
<h1>Gate the tag on the same checks as main, this sprint</h1>
|
|
514
|
+
<p>One pipeline change, no new tooling.</p>
|
|
515
|
+
</deck-takeaway>
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**Fits:** one sentence, one qualifier. No summary, no thank-you slide, no
|
|
519
|
+
questions slide.
|
|
520
|
+
**Notes:** the first thing you will say when the talk stops.
|
|
521
|
+
**Split when:** never. If two actions are needed, name the first one.
|
|
522
|
+
**Variant:** `<deck-cover>` again with the contact details when the deck will be
|
|
523
|
+
read alone rather than presented.
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## Where to look next
|
|
528
|
+
|
|
529
|
+
| Question | Where |
|
|
530
|
+
|---|---|
|
|
531
|
+
| Every tag, attribute, slot and token | `rikiki-reference.md` |
|
|
532
|
+
| What makes a slide worth projecting | reference §14 |
|
|
533
|
+
| Themes and design tokens | reference §11 |
|
|
534
|
+
| Reveals, steps and animation | reference §7 |
|
|
535
|
+
| The three ways a deck runs | reference §16 |
|
|
536
|
+
| Diagnostic codes and the manifest | reference §12b |
|
package/llms.txt
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Rikiki
|
|
2
2
|
|
|
3
|
-
> Rikiki is a tiny (~
|
|
3
|
+
> Rikiki is a tiny (~43 KB gzip) Lit Web Components framework for technical
|
|
4
4
|
> presentations and product carousels. A deck is plain HTML: load a theme
|
|
5
5
|
> stylesheet, then the component bundle, then write a `<deck-root>` wrapping
|
|
6
6
|
> `deck-*` slide elements. No build step to author or run a deck.
|
|
7
7
|
|
|
8
|
-
This reference documents rikiki v0.
|
|
8
|
+
This reference documents rikiki v0.7.2.
|
|
9
9
|
|
|
10
10
|
The framework is opinionated:
|
|
11
11
|
|
|
@@ -17,16 +17,20 @@ The framework is opinionated:
|
|
|
17
17
|
|
|
18
18
|
## Reference
|
|
19
19
|
|
|
20
|
-
- [
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
- [Working guide](docs/llms/rikiki-workflow.md): the short path from a brief to a
|
|
21
|
+
file someone can present · seven steps, an editorial contract, nine
|
|
22
|
+
compositions by intent with checked HTML, and the order to try fixes in. Start
|
|
23
|
+
here; it says when to open the reference.
|
|
24
|
+
- [Full LLM reference](docs/llms/rikiki-reference.md) (served at `/rikiki/docs/llms/rikiki-reference.md`): the single source of truth · every tag, attribute, slot, design token, plugin, and recipe in one file. Read this first.
|
|
25
|
+
- [README](README.md): human overview, common patterns, theming notes.
|
|
26
|
+
- `npx rikiki init <name>.html`: writes a starter deck plus the runtime it loads, next to it. Nothing to copy by hand.
|
|
23
27
|
|
|
24
28
|
## Components
|
|
25
29
|
|
|
26
30
|
Authoring tags fall into four buckets (see the reference for the exhaustive attribute/slot tables):
|
|
27
31
|
|
|
28
|
-
- **Layouts (slide-level, direct children of `<deck-root>`)**: `<deck-cover>` · `<deck-section>` · `<deck-feature>` · `<deck-split>` · `<deck-feature-cards>` · `<deck-photo>` · `<deck-takeaway>`
|
|
29
|
-
- **Molecules (composed containers)**: `<deck-callout>` · `<deck-card>` · `<deck-md>` · `<deck-mermaid>` · `<deck-stat>` · `<deck-metric-list>` / `<deck-metric>` · `<deck-tier-list>` / `<deck-tier>` / `<deck-tier-arrow>` · `<deck-step-list>` / `<deck-step>` · `<deck-shortcut-list>` / `<deck-shortcut>` / `<deck-kbd>` · `<deck-stack>` · `<deck-grid>`
|
|
32
|
+
- **Layouts (slide-level, direct children of `<deck-root>`)**: `<deck-cover>` · `<deck-section>` · `<deck-feature>` · `<deck-split>` · `<deck-feature-cards>` · `<deck-photo>` · `<deck-takeaway>` · `<deck-bento>`
|
|
33
|
+
- **Molecules (composed containers)**: `<deck-callout>` · `<deck-card>` · `<deck-md>` · `<deck-mermaid>` · `<deck-stat>` · `<deck-metric-list>` / `<deck-metric>` · `<deck-tier-list>` / `<deck-tier>` / `<deck-tier-arrow>` · `<deck-step-list>` / `<deck-step>` · `<deck-shortcut-list>` / `<deck-shortcut>` / `<deck-kbd>` · `<deck-stack>` · `<deck-grid>` · `<deck-point>` / `<deck-cell>` / `<deck-fit>` / `<deck-csv>` (the bento family · reach for `<deck-point>` when a bento item holds words, and `<deck-cell>` when it holds something measured such as fit-to-cell text, a diagram or an image)
|
|
30
34
|
- **Atoms (primitives)**: `<deck-badge>` · `<deck-kicker>` · `<deck-punch>` · `<deck-code>`
|
|
31
35
|
- **Runtime (authoring touchpoints)**: `<deck-root>` (navigation host) · `<deck-notes>` (speaker notes, read by the presenter window)
|
|
32
36
|
|
|
@@ -34,17 +38,40 @@ Authoring tags fall into four buckets (see the reference for the exhaustive attr
|
|
|
34
38
|
|
|
35
39
|
- **Transitions**: `transition="slide|slide-up|slide-down|slide-right|fade|zoom|flip"` on `<deck-root>` (per-slide `data-transition`).
|
|
36
40
|
- **Presenter window**: press `P` · mirrors current + next slide, timer, and `<deck-notes>`. With a second screen it sends the slides fullscreen to the projector and keeps the presenter view on the speaker's screen; previews are 16:9; the projected deck auto-hides its chrome while it's open.
|
|
37
|
-
- **Shiki highlighting**: the built-in `deck-code` highlighter
|
|
41
|
+
- **Shiki highlighting**: the built-in `deck-code` highlighter knows js/ts/json/html/xml/svg/css/scss/less. The optional offline Shiki runtime provides TextMate highlighting for ts/typescript, js/javascript, html, css and json with the bundled `one-dark-pro` theme: `import { installShiki } from './dist/shiki.js'` then `await installShiki({ theme: 'one-dark-pro', langs })`. List only the supported languages the deck uses.
|
|
38
42
|
- **Click-stages**: `import { installClickStages } from './dist/click-stages.js'` then `installClickStages()` · per-element `data-click` / `data-anim` / `data-morph` reveals.
|
|
39
43
|
- **Slide zoom**: Ctrl/⌘+wheel / pinch / `+`/`-`/`0` magnify a slide (fixed canvas, on by default, pan by drag/wheel); `no-zoom` on `<deck-root>` opts out.
|
|
40
44
|
- **Writing a plugin**: `deckRoot.use(plugin)` with a `DeckPlugin` (`steps` / `applyStep` / `navigate` / `setup` hooks); `setDeckCodeHighlighter(fn)` overrides `<deck-code>` highlighting. Both re-exported from `dist/index.js`. `installShiki` / `installClickStages` are back-compat shims.
|
|
41
45
|
- **Livereload (authoring only)**: append `?live` to the deck URL.
|
|
42
46
|
|
|
43
|
-
##
|
|
47
|
+
## The CLI · what a consumer runs
|
|
44
48
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
49
|
+
Every command below works from an install, with no clone and no build step.
|
|
50
|
+
|
|
51
|
+
- `npx rikiki init <name>.html` · an editable source deck, plus the runtime
|
|
52
|
+
copied into `./rikiki/` beside it. Serve that folder over HTTP · ES modules do
|
|
53
|
+
not load from `file://`. Needs nothing but Node.
|
|
54
|
+
- `npx rikiki bundle <deck>.html [out.html]` · folds theme, runtime and images
|
|
55
|
+
into one self-contained file, curated to the components the deck uses. Needs
|
|
56
|
+
the optional peer `rolldown`.
|
|
57
|
+
- `npx rikiki render <deck>.html [--out dir] [--slides a,b] [--steps] [--baseline dir]` · one PNG
|
|
58
|
+
per slide, a gallery and a `manifest.json` tying each picture to the slide it
|
|
59
|
+
came from. This is how an agent sees a deck. `--baseline <dir>` compares each
|
|
60
|
+
fresh picture to the same-named one of an earlier render and ranks the slides
|
|
61
|
+
by how much moved. Needs the optional peer `playwright`.
|
|
62
|
+
- `npx rikiki check <deck>.html [--json] [--steps]` · measures the deck in a browser and
|
|
63
|
+
reports what is wrong: a runtime that never loaded, a missing file, a
|
|
64
|
+
misspelled `deck-*` element, content clipped by the slide, text too small for
|
|
65
|
+
a room, content painting outside its box or over a sibling, graph nodes
|
|
66
|
+
overlapping each other. `--json` writes a versioned report to stdout and
|
|
67
|
+
nothing else; `--steps` measures every revealed state of a slide instead of
|
|
68
|
+
its opening one. Exit 0 clean, 1 defects found, 2 could not look. Needs
|
|
69
|
+
`playwright`.
|
|
70
|
+
- `npx rikiki export <deck>.html [--output deck.pdf]` · one PDF page per slide.
|
|
71
|
+
Needs the optional peer `playwright`.
|
|
72
|
+
- `npx rikiki skills` · installs the three agent skills into `.claude/skills/`.
|
|
73
|
+
|
|
74
|
+
A missing optional peer is reported with the command that installs it.
|
|
48
75
|
|
|
49
76
|
## Optional
|
|
50
77
|
|