mdeck 3.11.0 → 3.12.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/CHANGELOG.md +28 -0
- package/README.md +3 -3
- package/assets/base.css +2 -0
- package/docs/reference/authoring.md +48 -7
- package/docs/site/content/appearance.md +1 -1
- package/docs/site/content/audience.md +36 -8
- package/docs/site/content/commands.md +4 -2
- package/docs/site/content/drawing.md +4 -4
- package/docs/site/content/getting-started.md +2 -32
- package/docs/site/content/install.md +3 -1
- package/docs/site/content/presenting.md +29 -8
- package/docs/site/content/writing.md +27 -0
- package/examples/showcase/slides.ar.md +5 -5
- package/examples/showcase/slides.de.md +5 -5
- package/examples/showcase/slides.de.results.json +27 -0
- package/examples/showcase/slides.en.md +5 -5
- package/package.json +1 -1
- package/skills/write-slides/SKILL.md +4 -1
- package/src/build/check.js +27 -6
- package/src/build/components.js +5 -3
- package/src/build/homePlugin.js +64 -14
- package/src/build/include.js +249 -0
- package/src/build/inkPlugin.js +12 -2
- package/src/build/relayAccess.js +3 -1
- package/src/build/renderCheck.js +23 -3
- package/src/build/slidesPlugin.js +64 -16
- package/src/build/timingPlugin.js +34 -18
- package/src/cli/args.js +3 -3
- package/src/cli/index.js +49 -10
- package/src/components/Bibliography.jsx +7 -2
- package/src/components/Poll.jsx +2 -2
- package/src/components/QrCodeTag.jsx +2 -2
- package/src/components/WordCloud.jsx +7 -6
- package/src/components/activity.jsx +11 -8
- package/src/components/poll.css +2 -0
- package/src/core/icons.js +6 -1
- package/src/core/labels.js +3 -0
- package/src/core/parseSlides.js +14 -4
- package/src/core/reactions.js +27 -0
- package/src/core/resultsReport.js +153 -0
- package/src/core/source.js +8 -1
- package/src/core/validateDeck.js +6 -2
- package/src/home/Home.jsx +38 -93
- package/src/home/home.css +5 -17
- package/src/layouts/renderSlide.jsx +13 -1
- package/src/live/answer/answer.css +12 -1
- package/src/live/answer/answer.js +32 -4
- package/src/live/client.js +23 -4
- package/src/live/rooms.js +29 -7
- package/src/live/server.js +15 -1
- package/src/runtime/KeyHelp.jsx +115 -0
- package/src/runtime/PresenterChrome.jsx +168 -0
- package/src/runtime/Reactions.jsx +56 -0
- package/src/runtime/deck-stage.js +322 -17
- package/src/runtime/helpKeys.js +75 -0
- package/src/runtime/ink/room.js +6 -6
- package/src/runtime/main.jsx +396 -303
- package/src/runtime/slideControls.js +60 -0
- package/src/runtime/useTalkTimer.js +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.12.1 — 2026-10-12
|
|
4
|
+
|
|
5
|
+
- Fixed: on an iPhone the reaction buttons sat below the visible part of the phones' page, behind Safari's bar. The page now fits the visible height. Update your poll server for this one.
|
|
6
|
+
- `mdeck --version` (or `-v`) shows which mdeck this is.
|
|
7
|
+
- Fixed: with polls on your own server, the presenter view counted no phones: they join that server, while the presenter view's room stays on your computer. `mdeck run` now asks the server how many phones joined.
|
|
8
|
+
- Shorter status lines in the presenter view: "Poll server needs an update to 3.12.1.", "Phones follow another screen. Change slide to take them back."
|
|
9
|
+
|
|
10
|
+
## 3.12.0 — 2026-10-12
|
|
11
|
+
|
|
12
|
+
- In a word cloud each phone counts with one word: a new one replaces its earlier word, and the phone says which it sent. Before, one phone could fill the cloud.
|
|
13
|
+
- The poll server says which mdeck it runs (`/info`), and the presenter view warns in amber when your server runs an older mdeck than your computer, whose phones may then miss what is new, such as reactions.
|
|
14
|
+
- With `MDECK_SERVER` and `MDECK_SERVER_KEY` set in your shell, `mdeck run` uses your server without `--server` whenever it answers, and presents from this computer when it does not. `--no-server` leaves it out.
|
|
15
|
+
- The presenter view, redesigned: one toolbar of icons under the slide (each says what it does and its key; **?** lists all keys), with **This slide** for what can be done on the slide shown: a poll's lock, results and right answer, a video's play, the hotspots' numbers. Beside the slide: the slide number, the timer, the next slide small, and the notes in most of the room. Who is connected sits behind the icons that show it, with the audience window and the codes that pair an iPad or a phone; theme, palette, language, layout, rehearsal and the size of the notes are in the settings. The iPad's bar and the phone clicker use the same buttons.
|
|
16
|
+
- A phone becomes a clicker: in the presenter view's connections, **Phone clicker** shows its code. The phone gets the slide small, the time, the notes in large print, big Previous and Next buttons and the slide's own controls, and nothing to draw with. Every layout, the clicker too, switches to the others in the settings. Pairing moved from the launch page into the presenter view.
|
|
17
|
+
- Questions no longer show a QR code of their own: **J**, or the join button in the presenter view, shows the join code large over the slide on every screen, also in a deck window. `qr` on a question still puts the code beside it, and `qr="false"` is no longer needed.
|
|
18
|
+
- **J** shows the join code large over the slide on every screen, so a deck needs no extra join slide. The join link, the session code and whether phones can reach the poll server moved from the launch page into the presenter view's connections.
|
|
19
|
+
- Components can offer their own buttons in the toolbar and on the clicker with `data-presenter-control` (see the authoring reference).
|
|
20
|
+
- The laser has a laser-pointer icon instead of a crosshair, and the presenter view shows mdeck's icon in its tab.
|
|
21
|
+
- **B** makes the audience's screen black: the audience window, a paired iPad's audience window and phones following the talk go black, while the presenter view keeps the slide under a veil and says so. **B** again, the next key or a click on the black screen shows the slide again without moving on. A presentation clicker's blank button, which sends a full stop, works the same. The presenter view has a button for it.
|
|
22
|
+
- **O** shows every slide in a grid, to find one: arrows move between the slides, Enter or a click goes there, **O** or Escape go back. The slides show all their points. In the presenter view the grid opens in the presenter's own slide, so the audience keeps its slide until another is picked; the deck window's control bar has a button for it too.
|
|
23
|
+
- Reactions: with `reactions: true` in the deck's settings, the phones' answer page has a row of buttons (👍 👏 ❤️ 😮 🤔 🐢, or a list of the deck's own, up to eight emoji or short words). A tap floats up in the corner of the presenter view, never on the projector, and a tally keeps the last minute's. The server passes reactions on without keeping them, with a limit of their own, so a room full of reactions behind one network address still gets its answers in. `mdeck check` reports a `reactions` setting it cannot use.
|
|
24
|
+
- The answers kept in a talk can be saved from the launch page: **Answers from the talk** lists each question with how it came out, and saves every answer (CSV), a summary with one row per option, scale step, number or word and how many chose it (CSV), or everything (JSON). `mdeck results` now names each answer's slide, kind and question (`slide,room,kind,question,phone,at,answer`), and takes `--summary` and `--json`.
|
|
25
|
+
|
|
26
|
+
- `<bibliography keys="smith2020 doe2019" />` lists only these works.
|
|
27
|
+
- A deck can be made of other decks. A slide with nothing but `:::include ./lectures/02-graphs.md` stands for all the slides of that file, and `slides=3-7` keeps some of them. The included file stays a deck of its own, presented alone with its own settings. Included, its slides bring what they need: its references (`bibliography`, `nocite`, `csl` where the deck has none), its components, its own callout names (its `<bibliography />` lists the works it cites, as when it is shown alone), and its `hotspots` and `time`, which become its slides' own, shared out as when it is shown alone; the look stays the including deck's. Its pictures and drawings are found from its own folder, a deck in another language takes the file's twin in that language, and includes may nest. `mdeck run` shows a change to an included file straight away, rehearsal times are saved into the file a slide is written in, drawings stay with included slides however the deck around them changes, and `mdeck check` checks every file and names the file and line of a problem. The editor shows an include as a card naming the file; its slides are edited in that file.
|
|
28
|
+
- The number keys are for hotspots only. Without hotspots on the slide shown, they no longer jump to slides 1–10; they do nothing. To go to a slide, type its number into the presenter view's slide number.
|
|
29
|
+
- **?** shows the keys that work at this moment, over the slide in a see-through layer, in the presenter view and in a deck window: the number keys only while the slide shown has hotspots, the drawing keys while drawing, **L** only for a talk in several languages, **N** only in the slide-only layout, **F** only where the browser can go full screen. The list follows along while it is open (press **H** and it changes); **?** again, Escape or a click closes it. In the presenter view, **?** works while the slide has the keyboard too.
|
|
30
|
+
|
|
3
31
|
## 3.11.0 — 2026-10-12
|
|
4
32
|
|
|
5
33
|
- Time your talk. `time: 2m` in a slide's settings is how long to spend on it, `time: 20m` in the deck's the length of the talk; slides without a time share what is left. The presenter view counts down the time left on the slide and shows whether you are ahead of or behind the plan. `mdeck rehearse` (or **Rehearse** in the presenter view and on the launch page) times each slide as you go through the talk; at the end a table offers the times rounded to 15 seconds, to change in 15-second steps, and **Save to deck** writes them into the slides' settings without reloading the open windows. The editor has a Time field for each slide and a Length for the deck, and `mdeck check` reports a time it cannot read.
|
package/README.md
CHANGED
|
@@ -172,9 +172,9 @@ mdeck send talk.md # one file to email, with a PDF inside
|
|
|
172
172
|
- **Layouts:** title, chapter, big statement, image and text, split, full-bleed image, and plain content slides, with points that appear one at a time.
|
|
173
173
|
- **Looks:** six built-in themes and six colour palettes, each light or dark, changeable without touching the slides. Install more from the [theme repository](https://gh.tschieber.de/mdeck-themes/) with `mdeck themes install`, or make your own as small `extension.toml` folders beside the deck.
|
|
174
174
|
- **One launch page:** `mdeck run` opens a page with a live preview, the presenter and audience views, the deck and reader views, the editor, the guides, one-click builds and PDF, the deck's check results, and for decks with a server its health and the presenter code.
|
|
175
|
-
- **Presenting:** a presenter view with notes and timer, and an audience window that stays in sync. With `hotspots: auto`, the number keys zoom smoothly into a slide's pictures, code and tables, and the audience window zooms along.
|
|
175
|
+
- **Presenting:** a presenter view with notes and timer, and an audience window that stays in sync. **B** blacks out the audience's screen, **O** shows all slides to pick one, and a paired phone becomes a remote with your notes. With `hotspots: auto`, the number keys zoom smoothly into a slide's pictures, code and tables, and the audience window zooms along.
|
|
176
176
|
- **Drawing on slides:** pen with pressure, highlighter and a laser pointer, with a mouse, a finger or an iPad pencil (`D`). Drawings are saved in `<deck>.drawings.json` beside the deck and appear in every view, build and PDF. An iPad can present on its own, or pair with the laptop through a QR code on the launch page while the laptop's audience window follows it.
|
|
177
|
-
- **Audience questions:** `<poll room="lunch" options="A|B|C" />` shows live results and a QR code; people vote on their phones. `<scale>`, `<wordcloud>` and `<question>` ask for a rating, words or open answers, and `<qrcode join />` shows the join code once for all of them. Rooms run inside `mdeck run --network` or on a small server (`mdeck server`).
|
|
177
|
+
- **Audience questions:** `<poll room="lunch" options="A|B|C" />` shows live results and a QR code; people vote on their phones. `<scale>`, `<wordcloud>` and `<question>` ask for a rating, words or open answers, and `<qrcode join />` shows the join code once for all of them. With `reactions: true` people can also tap 👍 or 🐢 at any time, shown only to you. The answers save as CSV or JSON from the launch page. Rooms run inside `mdeck run --network` or on a small server (`mdeck server`).
|
|
178
178
|
- **Sharing:** a reader view with an outline, a phone-friendly Read mode and a PDF download; speaker notes are stripped from shared builds, and interactive slides appear in their finished state.
|
|
179
179
|
- **Citations:** cite with `[@key]` from BibTeX, CSL-JSON or Hayagriva files; each slide lists its references at its foot, `<bibliography />` lists them all, in any CSL style.
|
|
180
180
|
- **Content:** pictures, video, tables, callouts, code with syntax highlighting and live execution, formulas, QR codes, and your own Preact components, kept with one deck or shared between decks.
|
|
@@ -200,7 +200,7 @@ complete folder.
|
|
|
200
200
|
|
|
201
201
|
| Example | Theme | What it demonstrates |
|
|
202
202
|
|---|---|---|
|
|
203
|
-
| [Tour](examples/showcase/slides.en.md) | Neue | Start here: each slide shows the Markdown beside what it becomes, from headings to layouts, live code, citations, notes, drawing, zooming into a part, timing the talk, a poll
|
|
203
|
+
| [Tour](examples/showcase/slides.en.md) | Neue | Start here: each slide shows the Markdown beside what it becomes, from headings to layouts, live code, citations, notes, drawing, zooming into a part, timing the talk, a poll, a word cloud and reactions from the room, and sharing; in English, [German](examples/showcase/slides.de.md) and [Arabic](examples/showcase/slides.ar.md) |
|
|
204
204
|
| [Python](examples/python/slides.en.md) | Academic | A real lesson: live code to try out, points revealed step by step, notes on every slide, a poll to check understanding; in English, [German](examples/python/slides.de.md), [Hindi](examples/python/slides.hi.md) and [Farsi](examples/python/slides.fa.md), switched in the presenter view |
|
|
205
205
|
| [Custom layouts](examples/custom-layouts/slides.md) | Neue | A deck-local comparison design and named regions |
|
|
206
206
|
|
package/assets/base.css
CHANGED
|
@@ -241,6 +241,8 @@ deck-stage[data-ink-hidden] .slide-ink { display: none; }
|
|
|
241
241
|
[data-step][data-step-visible] {
|
|
242
242
|
opacity: 1;
|
|
243
243
|
}
|
|
244
|
+
/* The overview (O) shows each slide whole, to find it by. */
|
|
245
|
+
deck-stage[data-overview] [data-step] { opacity: 1; }
|
|
244
246
|
|
|
245
247
|
/* ── Print ───────────────────────────────────────────────────────────────── */
|
|
246
248
|
@media print {
|
|
@@ -68,7 +68,8 @@ Each `---` line starts a new slide. Frontmatter is only needed when you want a s
|
|
|
68
68
|
| `nocite` | — | References to list without citing them; `['*']` lists the whole file |
|
|
69
69
|
| `show.citations` | `true` | `false` leaves out each slide's own references above the footer |
|
|
70
70
|
| `time` | — | How long the talk takes, such as `20m`: slides without their own `time` share what is left (see [Time your talk](../site/content/presenting.md#time-your-talk)) |
|
|
71
|
-
| `hotspots` | `off` | Number keys zoom in on parts of a slide while presenting: `auto` (pictures, code, tables, formulas, videos, callouts, columns, polls and `data-hotspot` elements), `marked` (only `data-hotspot` elements) or `off` (
|
|
71
|
+
| `hotspots` | `off` | Number keys zoom in on parts of a slide while presenting: `auto` (pictures, code, tables, formulas, videos, callouts, columns, polls and `data-hotspot` elements), `marked` (only `data-hotspot` elements) or `off` (the number keys do nothing) |
|
|
72
|
+
| `reactions` | — | Reaction buttons on the phones' answer page; a tap floats up on the presenter's screen only, and is not kept: `true` (👍 👏 ❤️ 😮 🤔 🐢) or a list of 1 to 8 emoji or words of up to 16 characters |
|
|
72
73
|
|
|
73
74
|
### Theme params
|
|
74
75
|
|
|
@@ -113,6 +114,34 @@ then the reader shows them only when `reader.notes` is `true`, so a file can
|
|
|
113
114
|
carry notes for the presenter view without showing them to readers. The same
|
|
114
115
|
view is reachable in any build through `?view=reader`.
|
|
115
116
|
|
|
117
|
+
## Including other decks
|
|
118
|
+
|
|
119
|
+
A slide that is nothing but an `:::include` line, with no settings, stands for the slides of another deck file:
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
---
|
|
123
|
+
:::include ./lectures/02-graphs.md
|
|
124
|
+
---
|
|
125
|
+
:::include ./lectures/02-graphs.md slides=3-7
|
|
126
|
+
---
|
|
127
|
+
:::include "./lectures/week 3.md"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- The included file is a complete deck and can be presented alone; a file of slides without deck settings can be included too. When it is included, its slides come along with what they need from its settings, and the look stays the including deck's:
|
|
131
|
+
- `hotspots` and `time` become each included slide's own, unless it has one. A slide without a time gets its share of the included deck's `time`, shared out as that deck does alone (its slides' own times first, the rest in equal parts); `slides=` keeps each chosen slide's share.
|
|
132
|
+
- `bibliography` files and `nocite` keys are added to the including deck's; `csl` too, when the including deck sets none. Its `<bibliography />` lists the works it cites itself (and its `nocite`), not every work of the including deck.
|
|
133
|
+
- `components` folders, and a `components/` folder beside the included file, are added to the including deck's.
|
|
134
|
+
- Callout names of its own under `callouts` are added, unless the including deck names them; titles it gives built-in callouts are not.
|
|
135
|
+
- `theme`, `palette`, `appearance`, `params`, `width`, `height`, `lang`, `labels`, `show`, `meta`, `reader`, `server` and `session` are ignored, and a problem with them is not reported for the including deck.
|
|
136
|
+
- A block at the top of an included file with only `time:` or `hotspots:` (keys both a deck and a slide have) is read as the file's settings, for all its slides; `mdeck check` says so. For the first slide alone, write them in a `:::meta` block.
|
|
137
|
+
- `slides=` keeps the slides with these numbers (`3`, `3,5`, `2-4`), counted as the included file shows them, like `--slide`.
|
|
138
|
+
- Local paths (Markdown pictures, `<img>`, `<video>`, `<videoplayer>` and `<audio>` sources, `image:` and `logo:`) are read from the included file's folder. Paths from the root (`/…`) stay as written.
|
|
139
|
+
- Includes may nest. A file that includes itself, directly or through others, is an error, as is a missing file or a slide number beyond the file.
|
|
140
|
+
- In a deck whose file name gives a language (`course.de.md`), `./part.md` is read as `./part.de.md` when that file exists.
|
|
141
|
+
- Ids: slides of the including deck keep the ids they have in it; included slides get the included file's name in front of theirs, without leading digits (`02-graphs.md` → `graphs-slide-3`, `graphs-dijkstra`), with `-2`, `-3` … when the same name comes up again. Drawings made while presenting are saved under these ids, in the including deck's drawings file.
|
|
142
|
+
- Saved rehearsal times go into the file the slide is written in. The editor (`mdeck edit`) shows an include as one card; edit included slides in their own file.
|
|
143
|
+
- Palettes, layouts and themes are found beside the including deck.
|
|
144
|
+
|
|
116
145
|
## Available themes
|
|
117
146
|
|
|
118
147
|
| Key | Description |
|
|
@@ -425,7 +454,7 @@ As @smith2020 showed, it works [see @smith2020, p. 12; @doe2019].
|
|
|
425
454
|
| `@smith2020 [chap. 3]` | Smith et al. (2020, Chapter 3) | Smith et al. (1) |
|
|
426
455
|
|
|
427
456
|
- **On the slide** each citation shows in the style's short form, and the full reference of every work the slide cites stands in small type above the footer, after any footnotes. `show.citations: false` leaves those out.
|
|
428
|
-
- **`<bibliography />`** lists every cited work, plus those named in `nocite`, in the style's order. A list too long for one slide goes on several: `<bibliography part="1/2" />` on one and `<bibliography part="2/2" />` on the next split it in halves.
|
|
457
|
+
- **`<bibliography />`** lists every cited work, plus those named in `nocite`, in the style's order. A list too long for one slide goes on several: `<bibliography part="1/2" />` on one and `<bibliography part="2/2" />` on the next split it in halves. `<bibliography keys="smith2020 doe2019" />` lists only these works. In a deck that includes others, an included deck's `<bibliography />` lists the works that deck cites, as it does when shown alone, and the including deck's own lists every work.
|
|
429
458
|
- **Locators** after a comma: `p.`/`pp.`, `chap.`, `sec.`, `fig.`, `vol.`, `para.`, `no.`, `l.`, `eq.` and the German `S.`, `Kap.`, `Abb.`, `Bd.`, `Nr.`; a bare number is a page.
|
|
430
459
|
- **`@key` without brackets** is a citation only when the key is in the reference file, so e-mail addresses and `@handles` stay text. Citations in code, in links' addresses and in `:::notes` blocks work as in slide text, except that notes show no reference footer.
|
|
431
460
|
- **A key that is not in the file** shows as `@key?`, marked, and `mdeck check` and `mdeck build` warn about it.
|
|
@@ -807,7 +836,7 @@ For `play="auto"` the video pauses and resets to the beginning when you navigate
|
|
|
807
836
|
| `room` | `poll` | Name of the room that collects the answers; unique per poll in a deck. Letters, digits, `.`, `-`, `_` |
|
|
808
837
|
| `options` | — | Answers separated by `\|`. Markdown and `$…$` maths, as on a slide (see below). Or a list inside the tag |
|
|
809
838
|
| `question` | — | Question text, Markdown and maths like `options`; phones fall back to the slide heading |
|
|
810
|
-
| `qr` | `
|
|
839
|
+
| `qr` | `false` | Puts the join code beside the question; **J** in the presenter view shows it over any slide |
|
|
811
840
|
| `answer` | — | The right answer (several separated by `\|`): a button with a tick outlines its label, bar and count in green, also in the audience window and on paired devices, and each phone says whether its vote was right. `--poll-correct` sets the colour |
|
|
812
841
|
| `multiple` | — | Each phone may pick several options; the slide and the phones say so. A vote is then the list of options picked, and is right when it is exactly the `answer` options |
|
|
813
842
|
| `buttons` | — | `letters` puts A, B, C … before the options, and the phones show only those; `numbers` does the same with 1, 2, 3 …. For options better read on the slide, such as pictures (`options="\|"`) |
|
|
@@ -819,7 +848,7 @@ Four more activities take the same `room`, `question` and `qr`:
|
|
|
819
848
|
|---|---|---|---|
|
|
820
849
|
| `<scale>` | `min` (1), `max` (5), `low`, `high` | One button per number, `low`/`high` as labels | Count per number and the average; latest answer per device |
|
|
821
850
|
| `<numeric>` | `answer`, `tolerance` (0), `limit` (6), `placeholder`, `results` | A number field: `0.5`, `0,5`, `1/2`, `1e-3`; latest answer per device | The most frequent answers as bars, the rest as Other; with `answer`, the tick marks the right ones, counts them and tells each phone |
|
|
822
|
-
| `<wordcloud>` | `placeholder`, `limit` (60), `height` (520) | Text field, up to 40 characters
|
|
851
|
+
| `<wordcloud>` | `placeholder`, `limit` (60), `height` (520) | Text field, up to 40 characters; a phone's latest word counts | A packed word cloud (d3-cloud): size by frequency, some words upright, case-insensitive |
|
|
823
852
|
| `<question>` | `placeholder`, `limit` (8) | Text field, up to 200 characters, repeatable | The newest answers as cards |
|
|
824
853
|
|
|
825
854
|
`<qrcode follow />` shows the link for following the slides on phones and laptops (`?view=follow`), with `mdeck run --network` or a hosted deck with a `server` setting; the phones' answer page links to it as well. `<qrcode join />` shows the deck's join code large with its link (`size`, default 420), for a slide that invites everyone once; activities after it can use `qr="false"`. QR codes (`<qrcode>`, activities) are SVG in the slide's `--ink` on a transparent background; `--qr-ink` and `--qr-bg` override the colours.
|
|
@@ -844,7 +873,7 @@ The slide shows live bars, the number of answers, a QR code and a short link. Ph
|
|
|
844
873
|
|
|
845
874
|
Every activity has a lock button that closes it: answers after that do not count, and the phones say it is closed until it opens again. Polls and `<numeric>` also have the eye that hides or shows the results. Below the results, polls, scales and `<numeric>` count “12 of 31 answered” while phones are connected (people following the slides count as phones). The lock, the eye and the tick reach every screen of the talk, also after a reload: they are kept in the activity room's state on the server, which only the presenter may set, and phones read it there. Reset clears the answers and opens the activity again.
|
|
846
875
|
|
|
847
|
-
While `mdeck run` runs, the answers are kept beside the deck in `<slides>.results.json`: per activity room, each answer with its time, the phones numbered per room (their ids are not kept), and, once an activity was closed, only the answers that counted. Reset takes a room out of the file; a new, empty server leaves the file alone. Builds, `mdeck send` and `mdeck pdf` show the kept answers where no room server answers (`--no-results` leaves them out), and `mdeck results [slides.md] [-o file.csv]` prints them as CSV: `room,phone,at,answer`, several picks joined by
|
|
876
|
+
While `mdeck run` runs, the answers are kept beside the deck in `<slides>.results.json`: per activity room, each answer with its time, the phones numbered per room (their ids are not kept), and, once an activity was closed, only the answers that counted. Reset takes a room out of the file; a new, empty server leaves the file alone. Builds, `mdeck send` and `mdeck pdf` show the kept answers where no room server answers (`--no-results` leaves them out), and `mdeck results [slides.md] [-o file.csv]` prints them as CSV: `slide,room,kind,question,phone,at,answer`, several picks joined by `|` (`kind` is poll, scale, number, words or question; a room the deck no longer asks has no slide). `--summary` prints `slide,room,kind,question,answer,count,share`: one row per option, scale step, number or word, counted as the slide counts them (each phone's latest answer for polls, scales and numbers; every answer for words and questions), and `average` and `median` rows for scales and numbers. `--json` (or `-o file.json`) writes `{ version, title, exportedAt, questions: [{ room, slide, kind, question, closed, savedAt, summary, answers }] }`. The launch page offers the same three files.
|
|
848
877
|
|
|
849
878
|
`--no-polls` leaves slides with an activity or a join code (`<qrcode join />`) out of `mdeck send`, `mdeck build --reader` and `mdeck pdf`; without it they show as a record of the talk. Saved drawings follow the remaining slides.
|
|
850
879
|
|
|
@@ -965,8 +994,20 @@ export default function Counter() {
|
|
|
965
994
|
- Choose names that belong to your component, such as `countdown` or
|
|
966
995
|
`quiz:round`: every component in the deck shares one set of names.
|
|
967
996
|
|
|
968
|
-
|
|
969
|
-
|
|
997
|
+
A button the presenter uses during the talk, such as one that starts or stops
|
|
998
|
+
something, can be offered in the presenter view's toolbar and on the phone
|
|
999
|
+
clicker: give it `data-presenter-control`, an `aria-label` (or a value for
|
|
1000
|
+
`data-presenter-control`) that says what it does, `aria-pressed` while it is
|
|
1001
|
+
on, and `data-presenter-icon` with one of mdeck's icon names. A press there
|
|
1002
|
+
clicks the button on the slide.
|
|
1003
|
+
|
|
1004
|
+
```jsx
|
|
1005
|
+
<button data-presenter-control data-presenter-icon="play" aria-label="Start the countdown"
|
|
1006
|
+
aria-pressed={running} onClick={toggle}>…</button>
|
|
1007
|
+
```
|
|
1008
|
+
|
|
1009
|
+
`mdeck/component` and these attributes are the part of mdeck that components
|
|
1010
|
+
may rely on; they are kept stable across versions. A component renders inside its slide. Anything
|
|
970
1011
|
else it reaches, such as the page outside its slide, the `<deck-stage>`, mdeck's
|
|
971
1012
|
events or the presenter view, is not part of it and may change without notice.
|
|
972
1013
|
|
|
@@ -128,7 +128,7 @@ Open the launch page and choose **Presenter view**:
|
|
|
128
128
|
mdeck run my-talk.md
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
Its
|
|
131
|
+
Its settings (the slider button at the top) let you try other themes, palettes and light or dark. These changes are a preview: they do not save back to your text file. Once you find a look you like, put its settings in the file and save.
|
|
132
132
|
|
|
133
133
|
## More themes from other people
|
|
134
134
|
|
|
@@ -34,7 +34,7 @@ Every poll in a presentation shows the same code, so people scan once. Their pho
|
|
|
34
34
|
| `multiple` | Each phone may pick several options. The slide and the phones say “Several answers possible”. Without it, one option per phone. |
|
|
35
35
|
| `buttons` | `letters` puts A, B, C … before the options on the slide, and the phones show only those letters; `numbers` does the same with 1, 2, 3 … For options that are pictures or long formulas, better read on the big screen. |
|
|
36
36
|
| `results` | `hidden` starts with the bars hidden, e.g. to let people vote before they see what others chose. |
|
|
37
|
-
| `qr` |
|
|
37
|
+
| `qr` | Puts the deck's join code beside the question. Usually not needed: **J** shows it over any slide (see below). |
|
|
38
38
|
|
|
39
39
|
The question and the options may contain formatting and formulas, written as on a slide, so a maths lecture can ask:
|
|
40
40
|
|
|
@@ -91,14 +91,16 @@ Besides a poll, four more kinds work the same way: one line on a slide, answered
|
|
|
91
91
|
|---|---|---|
|
|
92
92
|
| `<scale>` | The numbers from `min` to `max` (1 to 5 unless set, at most 11 steps), with `low` and `high` as labels at the ends | How many chose each number, and the average. Each phone's latest answer counts |
|
|
93
93
|
| `<numeric>` | A field for a number: `0.5`, `0,5`, `1/2` or `1e-3` | The most frequent answers as bars, six unless `limit` says otherwise, and the rest as Other. With `answer`, the tick marks the right ones and counts them, and each phone hears whether it was right; `tolerance` (0 unless set) says how far off still counts. Each phone's latest answer counts |
|
|
94
|
-
| `<wordcloud>` | A short text field | A cloud of every answer, packed around the middle, larger the more often it came in and some upright. Capitals and extra spaces do not matter.
|
|
94
|
+
| `<wordcloud>` | A short text field | A cloud of every answer, packed around the middle, larger the more often it came in and some upright. Capitals and extra spaces do not matter. Each phone counts with one word: a new one replaces its earlier word. `height` sets its height (520). Colours come from the palette; `--cloud-1` to `--cloud-6` override them |
|
|
95
95
|
| `<question>` | A text field | The newest answers as cards, eight unless `limit` says otherwise. People may send several |
|
|
96
96
|
|
|
97
97
|
All of them take `room`, `question` and `qr` like a poll, and `placeholder` for the text fields. Their `question`, and the scale's `low` and `high`, may contain formatting and formulas like a poll's options. All of them have the lock that closes them; `<numeric>` also has the eye and the tick, and takes `results="hidden"`.
|
|
98
98
|
|
|
99
|
-
##
|
|
99
|
+
## Let phones join
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
Questions show no QR code of their own. When people should join, press **J** in the presenter view (or the QR-code button): the deck's join code appears large over the slide on the projector and every other screen, with the link below it. Phones that scanned it follow along to every question. **J** again, or the next step, shows the slide again; press it once more for people who arrive late.
|
|
102
|
+
|
|
103
|
+
To keep the code on a slide of its own, or beside one question, write it there:
|
|
102
104
|
|
|
103
105
|
```markdown
|
|
104
106
|
---
|
|
@@ -109,10 +111,12 @@ Each question shows the QR code unless you say otherwise. To invite everybody on
|
|
|
109
111
|
---
|
|
110
112
|
# How do you make slides today?
|
|
111
113
|
|
|
112
|
-
<poll room="tools" options="PowerPoint|Keynote|Markdown"
|
|
114
|
+
<poll room="tools" options="PowerPoint|Keynote|Markdown" />
|
|
113
115
|
```
|
|
114
116
|
|
|
115
|
-
`<qrcode join />` shows the
|
|
117
|
+
`<qrcode join />` shows the join code large on that slide (`size` sets its size); `qr` on a question puts the code beside it.
|
|
118
|
+
|
|
119
|
+
The presenter view's connection icons show the join link to copy, and whether phones can reach the poll server.
|
|
116
120
|
|
|
117
121
|
The code is drawn in the slide's colours, so it fits the theme; phone cameras also read light codes on dark slides.
|
|
118
122
|
|
|
@@ -122,6 +126,20 @@ The code is drawn in the slide's colours, so it fits the theme; phone cameras al
|
|
|
122
126
|
|
|
123
127
|
It needs their devices to reach your slides: present with `mdeck run --network` when everyone is on the same Wi-Fi (it prints the **Follow** address), or host the built deck with a `server` setting for people anywhere.
|
|
124
128
|
|
|
129
|
+
### Reactions
|
|
130
|
+
|
|
131
|
+
Let people react while you talk, with or without a question on screen:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
---
|
|
135
|
+
reactions: true
|
|
136
|
+
---
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The phones' answer page then has a row of buttons, 👍 👏 ❤️ 😮 🤔 🐢, below the question or while they wait for the next one. A tap floats up in the corner of your presenter view for a moment, and a small tally keeps what came in the last minute, so a few 🐢 ("slower, please") still show after they faded. The audience window and the projector never show them. Give your own, up to eight emoji or short words: `reactions: [👍, 🤔, 🐢, louder]`. Each phone can react about once a second; reactions are not kept anywhere.
|
|
140
|
+
|
|
141
|
+
People reach the answer page through the join code: press **J** in the presenter view to show it, also in a deck with reactions and no questions.
|
|
142
|
+
|
|
125
143
|
Hover over the results to see **Reset**, which clears the answers, for example before the real session. Only the presenter can reset.
|
|
126
144
|
|
|
127
145
|
## How phones and slides meet
|
|
@@ -206,7 +224,7 @@ server: https://rooms.example.org
|
|
|
206
224
|
---
|
|
207
225
|
```
|
|
208
226
|
|
|
209
|
-
To keep the address out of the deck, leave the setting out and set `MDECK_SERVER=https://rooms.example.org` in your shell instead
|
|
227
|
+
To keep the address out of the deck, leave the setting out and set `MDECK_SERVER=https://rooms.example.org` in your shell instead. With `MDECK_SERVER_KEY` set as well, `mdeck run` then uses the server by itself, without `--server`; when the server does not answer, it says so and presents from your computer, and `--no-server` leaves it out on purpose. A built or sent presentation reads the address from the deck only, because it has to carry it to wherever it is opened.
|
|
210
228
|
|
|
211
229
|
`MDECK_SERVER_KEY` is the server’s master key. `mdeck run` keeps it on your computer and lets your local browser, or an iPad with a revocable pairing token, move the phones along and reset polls for this deck. Pairing QR codes never include the master key. Start `mdeck run` with the same key (`MDECK_SERVER_KEY=choose-a-secret mdeck run my-talk.md`), and the launch page checks the server, shows the join link and opens the presenter view. Paired devices remember only their token, scoped to this presentation; it never appears in the address bar or in the slide file. A hosted presenter can still unlock the server by opening the presenter view once with `?serverkey=…` in its address. That browser remembers the master key. Without permission to control the server, phones wait. The presenter view says whether the phones follow it, and if not, why.
|
|
212
230
|
|
|
@@ -218,7 +236,17 @@ Two presentations with the same title share a session code. Give one of them `se
|
|
|
218
236
|
|
|
219
237
|
Answers are anonymous. Each phone gets a random number so it can change its vote; nothing else identifies it. The server keeps answers in memory only. It forgets a room after twelve hours without visitors and everything when it restarts. Each phone can send a limited number of answers in a short time.
|
|
220
238
|
|
|
221
|
-
While you present with `mdeck run`, the answers are also kept beside the presentation, in `my-talk.results.json`. It holds each answer with its time, and the phones numbered 1, 2, 3 … per question instead of their random numbers. Once a question was closed, only the answers that counted. **Reset** takes a question's answers out of the file; a new server that starts empty leaves the file as it is.
|
|
239
|
+
While you present with `mdeck run`, the answers are also kept beside the presentation, in `my-talk.results.json`. It holds each answer with its time, and the phones numbered 1, 2, 3 … per question instead of their random numbers. Once a question was closed, only the answers that counted. **Reset** takes a question's answers out of the file; a new server that starts empty leaves the file as it is. A deck hosted with its own `server` keeps nothing beside it.
|
|
240
|
+
|
|
241
|
+
### Save the answers
|
|
242
|
+
|
|
243
|
+
Under **Answers from the talk**, the launch page lists each question with how many phones answered and how it came out, and saves the answers as a file:
|
|
244
|
+
|
|
245
|
+
- **Answers (CSV)**: every answer on its own row, with the slide, the question, the phone's number and the time, to open in a spreadsheet.
|
|
246
|
+
- **Summary (CSV)**: one row per option, number on a scale, number typed or word, with how many chose it and their share; for scales and numbers also the average and the median. It counts as the slide does: each phone's last vote.
|
|
247
|
+
- **Everything (JSON)**: all of it, for other programs.
|
|
248
|
+
|
|
249
|
+
On the command line, `mdeck results my-talk.md` prints the answers as CSV, `--summary` the summary and `--json` everything; `-o answers.csv` (or `.json`) saves them to a file.
|
|
222
250
|
|
|
223
251
|
## In a PDF or a shared file
|
|
224
252
|
|
|
@@ -27,6 +27,7 @@ For how the commands, the views and the servers fit together, see [Views, comman
|
|
|
27
27
|
| `mdeck list`, `mdeck starter` | Look up layouts, themes and palettes |
|
|
28
28
|
| `mdeck docs` | Open this documentation |
|
|
29
29
|
| `mdeck --help` | Show a short list of commands |
|
|
30
|
+
| `mdeck --version` | Show which version of mdeck you have |
|
|
30
31
|
|
|
31
32
|
## The launch page
|
|
32
33
|
|
|
@@ -46,7 +47,8 @@ Two options make the slides reachable from other devices:
|
|
|
46
47
|
| Option | What it does |
|
|
47
48
|
|---|---|
|
|
48
49
|
| `--network` | Phones and tablets on the same network can open the slides. |
|
|
49
|
-
| `--server` | An iPad on any network can present through your own server. It takes the server's address, or finds it in the deck's `server` setting or in the `MDECK_SERVER` variable, in that order. The key goes in `MDECK_SERVER_KEY`. |
|
|
50
|
+
| `--server` | An iPad on any network can present through your own server. It takes the server's address, or finds it in the deck's `server` setting or in the `MDECK_SERVER` variable, in that order. The key goes in `MDECK_SERVER_KEY`. With both `MDECK_SERVER` and `MDECK_SERVER_KEY` set in your shell, `mdeck run` uses the server without `--server` whenever it answers, and presents from this computer when it does not. |
|
|
51
|
+
| `--no-server` | Present from this computer only, even with `MDECK_SERVER` set. |
|
|
50
52
|
|
|
51
53
|
See [Draw on your slides](drawing.html#present-from-an-ipad) for both. The launch page itself and its buttons only work on your own computer. `--port 4000` chooses the port and `--no-open` starts without opening a browser.
|
|
52
54
|
|
|
@@ -100,7 +102,7 @@ The design page shows themes and palettes on a sample deck with every kind of sl
|
|
|
100
102
|
| `mdeck pdf my-talk.md -o talk.pdf` | Render the slides to a PDF file (`--no-polls` leaves out the slides with polls) |
|
|
101
103
|
| `--no-drawings` | Leave out the drawings from `my-talk.drawings.json`, for `build`, `send` and `pdf` |
|
|
102
104
|
| `--no-results` | Leave out the answers kept in `my-talk.results.json`, for `build`, `send` and `pdf`; the polls then show their questions only |
|
|
103
|
-
| `mdeck results my-talk.md` | The answers kept during the talk, as CSV; `-o answers.csv` saves them to a file |
|
|
105
|
+
| `mdeck results my-talk.md` | The answers kept during the talk, as CSV with the slide and the question; `--summary` one row per option or word with how many chose it, `--json` everything; `-o answers.csv` (or `.json`) saves them to a file |
|
|
104
106
|
|
|
105
107
|
See [Send, host or print your slides](sharing.html) for help choosing between them. Unknown options, missing option values and extra filenames stop the command before it changes any output. `--output=path` and `-o path` are both accepted. `mdeck preview --no-open --port 4200` previews without opening a browser and chooses a port.
|
|
106
108
|
|
|
@@ -47,7 +47,7 @@ There are two ways.
|
|
|
47
47
|
**The iPad next to your laptop.** The laptop shows the slides on the projector; you draw and go through the slides on the iPad, with your notes on it.
|
|
48
48
|
|
|
49
49
|
1. Start `mdeck run my-talk.md --network`, so the iPad in the same network can reach your laptop.
|
|
50
|
-
2.
|
|
50
|
+
2. In the presenter view on the laptop, click the connection icons at its top, choose **iPad**, and scan the code with the iPad's camera. The presenter view opens on the iPad, paired with your laptop, so it may save drawings and steer the phones of a poll. It is the same presenter view as on the laptop; pairing only gives it these rights. Once it is open, the launch page says so.
|
|
51
51
|
3. On the laptop, open the **audience window** from the same place and move it to the projector. It follows the iPad: slides, revealed points, drawings as you draw them, and videos. Navigation in the audience window also updates the iPad's slide, notes and next-slide preview.
|
|
52
52
|
|
|
53
53
|
**Videos.** A video file on a slide (`<videoplayer src="…" />`) plays, pauses and jumps on the projector as you tap it on the iPad. The sound comes from the projector: while the audience window is open, the iPad's copy plays silently. Browsers start sound only on a page someone has clicked, so click the audience window once before the talk (going full screen counts); otherwise the video plays there without sound and shows **Click for sound**.
|
|
@@ -59,13 +59,13 @@ A pairing code works once, for ten minutes. **Unpair** on the launch page ends e
|
|
|
59
59
|
**The iPad on another network.** Some networks, often big Wi-Fi networks at universities, do not let devices reach each other, and a laptop's firewall may not let the iPad in. With a server of your own (see [Ask your audience](audience.html#use-it-in-a-real-session)) the iPad does not need to reach your laptop at all: your laptop connects out to the server, and the server passes the iPad's requests to it. The slides are not uploaded or stored anywhere.
|
|
60
60
|
|
|
61
61
|
1. Tell mdeck where your server is: `server: https://rooms.example.org` in the deck's settings, or `MDECK_SERVER` in your shell, or the address after the option in the next step.
|
|
62
|
-
2. Start `MDECK_SERVER_KEY=your-key mdeck run my-talk.md --server`. The key is the one the server was started with.
|
|
63
|
-
3.
|
|
62
|
+
2. Start `MDECK_SERVER_KEY=your-key mdeck run my-talk.md --server`. The key is the one the server was started with. With `MDECK_SERVER` and `MDECK_SERVER_KEY` both set in your shell, plain `mdeck run my-talk.md` is enough: it uses the server whenever it answers.
|
|
63
|
+
3. In the presenter view on the laptop, click the connection icons, choose **iPad** and scan the code. The address in the code is on your server and contains a long random name, so treat it like a private link.
|
|
64
64
|
4. Open the **audience window** on the laptop as before. It follows the iPad through the server.
|
|
65
65
|
|
|
66
66
|
Everything else works as with `--network`: drawings are saved in the drawings file beside the deck, and the iPad may steer polls. Editing the slides on the laptop reloads the iPad too. The server only passes on what the presenter and audience pages need; the launch page, the editor and the other files in your folder are not reachable through it. Stopping `mdeck run` ends the connection, and a pairing code stops working when you unpair or stop.
|
|
67
67
|
|
|
68
|
-
On
|
|
68
|
+
On the iPad the presenter view shows only the slide, with one bar at the top: the slide number, the timer, previous and next, drawing, black screen, all slides, hotspots, the slide's own controls, the notes drawer (with the next slide, also **N**), who is connected and the settings. The settings switch the layout; each device remembers its choice.
|
|
69
69
|
|
|
70
70
|
With a server of your own (the `server` setting, see [Ask your audience](audience.html)), the same also works with a hosted deck: open the presenter view on the iPad with your key (`?serverkey=…`), and the audience window anywhere else follows it. With the deck opened through `mdeck run` and the server's key set (`MDECK_SERVER_KEY`), the paired iPad and the audience window talk over your own network, and only the polls go through the server. Drawings are then kept on the iPad; download the drawings file after the talk.
|
|
71
71
|
|
|
@@ -1,38 +1,8 @@
|
|
|
1
1
|
# Make your first presentation
|
|
2
2
|
|
|
3
|
-
You will
|
|
3
|
+
You will give your AI assistant material you already have and open the deck it makes.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
mdeck needs Node.js and npm on your computer. Install [Node.js](https://nodejs.org) (version 22 or newer); npm comes with it.
|
|
8
|
-
|
|
9
|
-
Open a terminal. A terminal is an app where you type short commands: Terminal on macOS, or PowerShell on Windows. A text editor may also have a Terminal menu.
|
|
10
|
-
|
|
11
|
-
Run this command to install mdeck:
|
|
12
|
-
|
|
13
|
-
```sh
|
|
14
|
-
npm install -g mdeck
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
You normally do this only once. To update later, run it again.
|
|
18
|
-
|
|
19
|
-
Check that the command is ready:
|
|
20
|
-
|
|
21
|
-
```sh
|
|
22
|
-
mdeck --help
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
If your computer does not recognize `npm` or `mdeck`, see [When something goes wrong](troubleshooting.html#the-command-is-not-recognized).
|
|
26
|
-
|
|
27
|
-
## Teach your assistant about mdeck
|
|
28
|
-
|
|
29
|
-
mdeck comes with a set of instructions, called a *skill*, that tells an AI assistant how mdeck slides are written, which layouts and looks exist, and how to check its work. Install it for the assistant you use:
|
|
30
|
-
|
|
31
|
-
```sh
|
|
32
|
-
mdeck skill --install claude
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Replace `claude` with `codex`, `cursor`, `copilot` or `gemini` for those tools. Run `mdeck skill` to see the list. For Cursor, Copilot and Gemini, run it in your talk's folder.
|
|
5
|
+
First [install mdeck](install.html) and the skill for your assistant, if you have not yet. It takes a few minutes.
|
|
36
6
|
|
|
37
7
|
## Hand over your material
|
|
38
8
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Three commands in a terminal, a few minutes in all. mdeck is published on npm, the package registry for JavaScript tools, as [mdeck](https://www.npmjs.com/package/mdeck).
|
|
4
4
|
|
|
5
|
+
A terminal is an app where you type short commands: Terminal on macOS, or PowerShell on Windows. A text editor may also have a Terminal menu.
|
|
6
|
+
|
|
5
7
|
## 1. Install Node.js
|
|
6
8
|
|
|
7
9
|
mdeck runs on [Node.js](https://nodejs.org) 22 or newer, which brings npm along. Check whether you have it:
|
|
@@ -30,7 +32,7 @@ mdeck --help
|
|
|
30
32
|
mdeck skill --install claude
|
|
31
33
|
```
|
|
32
34
|
|
|
33
|
-
Write `codex`, `cursor`, `copilot` or `gemini` instead of `claude` for those assistants. [Work with an AI assistant](claude-skill.html) says more.
|
|
35
|
+
This installs a *skill*: instructions that tell your assistant how mdeck slides are written, which layouts and looks exist, and how to check its work. Write `codex`, `cursor`, `copilot` or `gemini` instead of `claude` for those assistants; for Cursor, Copilot and Gemini, run it in your talk's folder. `mdeck skill` shows the list, and [Work with an AI assistant](claude-skill.html) says more.
|
|
34
36
|
|
|
35
37
|
Then [make your first presentation](getting-started.html).
|
|
36
38
|
|
|
@@ -34,17 +34,20 @@ can skip if I run out of time.
|
|
|
34
34
|
mdeck run my-talk.md
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
The launch page it opens has a **Presenter view** button.
|
|
37
|
+
The launch page it opens has a **Presenter view** button. The presenter view shows the slide with a toolbar under it, and beside it the time, the next slide and your notes:
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
- **Under the slide**: previous and next, then drawing, black screen, all slides, hotspots and full screen, and **This slide**: what can be done on the slide shown, such as a poll's lock, results and right answer, or playing its video. Point at a button to see what it does and its key; **?** lists all keys.
|
|
40
|
+
- **At the top of the notes**: the slide number (type one to jump there), the timer, the audience window button (a projector), the icons of who is connected, and the settings.
|
|
41
|
+
- **Who is connected** (the icons): the audience windows, a paired iPad, phones; the join link for polls; and the codes that pair an iPad or a phone. A red dot means something needs you, such as phones that do not follow.
|
|
42
|
+
- **Settings**: the layout (speaker, slide only, phone clicker), the theme, palette and light or dark to try, the language, the timer and rehearsal, the size of the notes, and the way back to the launch page.
|
|
43
|
+
|
|
44
|
+
Open the audience window with the projector button. If you have a projector or second screen, move it there, and keep the presenter view on your own screen.
|
|
40
45
|
|
|
41
46
|
The two windows follow the same slide and reveal position: navigate in either window and the other follows. This works between windows in the same browser and between your laptop and a paired iPad. To connect the iPad, see [Draw on your slides](drawing.html#present-from-an-ipad).
|
|
42
47
|
|
|
43
48
|
A video file you play, pause or move in the presenter view does the same in the audience window, which plays the sound; the presenter view's copy stays silent while the audience window is open. Click the audience window once before the talk, so the browser lets it play sound.
|
|
44
49
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
For a single screen, switch the presenter view to its slide-only layout. **F** or the fullscreen button fills the screen in either the presenter view or the audience window; fullscreen does not select another view.
|
|
50
|
+
For a single screen, choose **Slide only** in the settings. **F** or the fullscreen button fills the screen in either the presenter view or the audience window; fullscreen does not select another view.
|
|
48
51
|
|
|
49
52
|
To let people answer a question on their phones, put a poll on a slide. See [Ask your audience](audience.html).
|
|
50
53
|
|
|
@@ -57,15 +60,33 @@ To let people answer a question on their phones, put a poll on a slide. See [Ask
|
|
|
57
60
|
| Home | Go to the first slide |
|
|
58
61
|
| End | Go to the last slide when the slide view has focus |
|
|
59
62
|
| R | Start again and clear the reveals |
|
|
63
|
+
| B or . | Make the audience's screen black, and show the slide again (see below) |
|
|
64
|
+
| J | Show the join code over the slide, on every screen, and hide it again, in the presenter view of a deck with polls ([Ask your audience](audience.html)) |
|
|
65
|
+
| O | Show all slides in a grid, to pick one (see below) |
|
|
60
66
|
| D | Start or stop drawing on the slide ([Draw on your slides](drawing.html)) |
|
|
61
67
|
| I | Hide or show the drawings |
|
|
62
68
|
| F | Full screen, where the browser allows it |
|
|
63
69
|
| N | Open or close the notes drawer, in the presenter view's slide-only layout |
|
|
64
70
|
| L | Switch to the talk's next language, for a talk written in several (see below) |
|
|
65
|
-
| 1–9 | Zoom in on a part of the slide, with hotspots on (see below); without them,
|
|
71
|
+
| 1–9 | Zoom in on a part of the slide, with hotspots on (see below); without them, nothing |
|
|
66
72
|
| 0 or Escape | Show the whole slide again |
|
|
67
73
|
| H | Turn hotspots on or off for this talk, in the presenter view |
|
|
68
74
|
| T | Start or pause the timer, in the presenter view |
|
|
75
|
+
| ? | Show the keys that work at this moment, over the slide; **?** again or Escape closes the list |
|
|
76
|
+
|
|
77
|
+
## Use your phone as a clicker
|
|
78
|
+
|
|
79
|
+
Start `mdeck run my-talk.md --network`, open the presenter view, click the connection icons at its top, choose **Phone clicker**, and scan the code with the phone's camera. The phone shows the slide small, the time and how you stand against the plan, your notes in large print, and big **Previous** and **Next** buttons where your thumb is. Under the slide it has the slide's own controls: close a poll, show its results or the right answer, play a video, zoom into a numbered part. The audience window on the laptop does what the phone does. Nothing on the phone draws. Where the browser allows it (`https://`, or a page on the laptop itself), the phone's screen stays on during the talk.
|
|
80
|
+
|
|
81
|
+
The clicker is one of the presenter view's layouts: the settings switch any presenter view between **Speaker**, **Slide only** and **Clicker**, on the phone as well. Each device remembers its layout.
|
|
82
|
+
|
|
83
|
+
## Black out the screen
|
|
84
|
+
|
|
85
|
+
Press **B** when the room should look at you, not at the slide: the audience window goes black, and so do a paired iPad's audience window and phones following the talk. Your presenter view keeps the slide under a dark veil and says that the audience sees a black screen. **B** again, the next key (→, Space) or a click on the black screen shows the slide again, without moving on. Many presentation clickers have a button for this; it sends a full stop, which works like **B**. The presenter view also has a button for it.
|
|
86
|
+
|
|
87
|
+
## Find a slide
|
|
88
|
+
|
|
89
|
+
Press **O**, or the button with the row of slides, to see every slide of the talk in a grid: the slide shown has a red frame. Move with the arrow keys and press Enter, or click a slide, to go there. **O** or Escape closes the grid and leaves you where you were. In the presenter view the grid opens in your own slide, so the audience keeps the slide they are looking at until you pick another. Every slide in the grid shows all of its points, to make it easier to recognise.
|
|
69
90
|
|
|
70
91
|
To jump to a slide, tap or click the slide number in the presenter view (beside the arrows on an iPad, at the top of the speaker layout), type the number and press Enter, or Go on an iPad's keyboard. Escape keeps the current slide.
|
|
71
92
|
|
|
@@ -101,7 +122,7 @@ You do not have to guess the times. Rehearse the talk and mdeck measures them:
|
|
|
101
122
|
mdeck rehearse my-talk.md
|
|
102
123
|
```
|
|
103
124
|
|
|
104
|
-
This opens the presenter view rehearsing: the timer starts, and every second on a slide counts towards it, including when you come back to it. **Rehearse** in the presenter view, and the tile on the launch page, start a rehearsal too. Press **Finish**, or go on past the last slide, and a table shows for each slide the time it has, the time you spent and the new time, rounded to 15 seconds. Change a new time in 15-second steps with **−** and **+** (or **↑** and **↓** on its row), put back the time the slide had, or take the slide's time out. **Save to deck** writes the new times into the slides' settings, so you can see them in the file and change them like any other setting. The open windows do not reload, and the deck is copied to `.mdeck-backups/` first.
|
|
125
|
+
This opens the presenter view rehearsing: the timer starts, and every second on a slide counts towards it, including when you come back to it. **Rehearse** in the presenter view's settings, and the tile on the launch page, start a rehearsal too. Press **Finish**, or go on past the last slide, and a table shows for each slide the time it has, the time you spent and the new time, rounded to 15 seconds. Change a new time in 15-second steps with **−** and **+** (or **↑** and **↓** on its row), put back the time the slide had, or take the slide's time out. **Save to deck** writes the new times into the slides' settings, so you can see them in the file and change them like any other setting. The open windows do not reload, and the deck is copied to `.mdeck-backups/` first.
|
|
105
126
|
|
|
106
127
|
Saving needs `mdeck run` or `mdeck rehearse`. A deck you built can still rehearse; **Copy** gives you the times to paste in yourself.
|
|
107
128
|
|
|
@@ -123,7 +144,7 @@ To see the whole slide again, press the same number again, **0** or **Escape**,
|
|
|
123
144
|
|---|---|
|
|
124
145
|
| `hotspots: auto` | Pictures, code blocks, tables, formulas, videos, callouts, columns and polls, and anything marked `data-hotspot` |
|
|
125
146
|
| `hotspots: marked` | Only what you marked with `data-hotspot`; nothing is found by itself |
|
|
126
|
-
| `hotspots: off` | Nothing. This is the default:
|
|
147
|
+
| `hotspots: off` | Nothing. This is the default: the number keys do nothing |
|
|
127
148
|
|
|
128
149
|
A slide can have its own setting in its frontmatter, such as `hotspots: false` for a slide whose numbers you do not want, or `hotspots: auto` on one slide of a deck without hotspots. Mark a part of your own in inline HTML with `data-hotspot`, and keep a found one out with `data-hotspot="off"`:
|
|
129
150
|
|
|
@@ -107,6 +107,33 @@ Keep the spaces before `title` and `author`: they put those values inside the `m
|
|
|
107
107
|
|
|
108
108
|
For a talk in German, add `lang: de` to these settings. The page is then marked as German, which helps screen readers and hyphenation, and the words mdeck adds for your audience, such as the buttons for readers and polls, are German too.
|
|
109
109
|
|
|
110
|
+
## Put several files together
|
|
111
|
+
|
|
112
|
+
A course, or a talk built from parts you also give on their own, can be one deck made of others. A slide with nothing but an `:::include` line stands for all the slides of another file:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
---
|
|
116
|
+
theme: neue
|
|
117
|
+
meta:
|
|
118
|
+
title: "Algorithms, autumn term"
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
# Welcome
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
:::include ./lectures/01-sorting.md
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
:::include ./lectures/02-graphs.md slides=3-7
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Each included file stays a deck of its own: `mdeck run lectures/02-graphs.md` still presents it alone, with its own theme and settings. Included, its slides come along with what they need: its references, its components, its own callout names, its hotspots setting and its time, which its slides share as they do when it is shown alone. The look (theme, palette, size, language) is that of the deck that includes it. A file of slides without settings of its own can be included too. `slides=3-7` (or `slides=2`, `slides=1,4-6`) keeps some of them, numbered as that file shows them.
|
|
132
|
+
|
|
133
|
+
Pictures, videos and drawings in an included file are found from its own folder, wherever it lies. A deck in another language takes the included file in that language where there is one: `course.de.md` including `./lectures/02-graphs.md` shows `02-graphs.de.md` beside it. An included file may include others.
|
|
134
|
+
|
|
135
|
+
Edit the slides of an included file in that file. The editor shows the include as one card naming the file, and while `mdeck run` is open, a change to that file appears in the deck straight away. Times saved after a rehearsal go into the file each slide is written in. `mdeck check` checks every file, and names the file and line of a problem.
|
|
136
|
+
|
|
110
137
|
## Reading older examples
|
|
111
138
|
|
|
112
139
|
Older decks put slide settings between `---` lines too:
|
|
@@ -6,6 +6,7 @@ meta:
|
|
|
6
6
|
organization: "FHNW"
|
|
7
7
|
date: "2026-10-06"
|
|
8
8
|
bibliography: refs.bib
|
|
9
|
+
reactions: true
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
---
|
|
@@ -469,7 +470,7 @@ time: 1m30s
|
|
|
469
470
|
|
|
470
471
|
`<poll room="tour" options="الكتابة|التخطيطات|الرسم|الاستطلاعات" />`
|
|
471
472
|
|
|
472
|
-
|
|
473
|
+
اضغط **J** ليظهر رمز الانضمام فوق الشريحة؛ تمسحه الهواتف وتبقى متصلة لكل الأسئلة التالية. ويمكنها الوصول إلى هذا الحاسوب حين تشغّل `mdeck run slides.md --network`.
|
|
473
474
|
:::
|
|
474
475
|
|
|
475
476
|
---
|
|
@@ -480,8 +481,7 @@ time: 1m
|
|
|
480
481
|
# كلمة واحدة من كل شخص
|
|
481
482
|
:::slot left
|
|
482
483
|
```markdown
|
|
483
|
-
<wordcloud room="mood"
|
|
484
|
-
qr="false" />
|
|
484
|
+
<wordcloud room="mood" />
|
|
485
485
|
|
|
486
486
|
<scale room="pace" min="1" max="5"
|
|
487
487
|
low="بطيء جدًا" high="سريع جدًا" />
|
|
@@ -490,11 +490,11 @@ time: 1m
|
|
|
490
490
|
```
|
|
491
491
|
:::
|
|
492
492
|
:::slot right
|
|
493
|
-
<wordcloud room="mood" placeholder="كلمة واحدة"
|
|
493
|
+
<wordcloud room="mood" placeholder="كلمة واحدة" />
|
|
494
494
|
:::
|
|
495
495
|
|
|
496
496
|
:::notes
|
|
497
|
-
الهواتف التي انضمّت
|
|
497
|
+
الهواتف التي انضمّت عند الاستطلاع تبقى متصلة؛ و**J** يُظهر رمز الانضمام مجددًا للمتأخرين. تظهر الإجابات فور وصولها. تضبط هذه الجولة `reactions: true`، فتظهر على الهواتف أيضًا أزرار 👍 👏 ❤️ 😮 🤔 🐢: تطفو النقرات في عرض المقدِّم لديك، ولا تظهر أبدًا على جهاز العرض.
|
|
498
498
|
|
|
499
499
|
إلى جانب الاستطلاعات وسحب الكلمات هناك التقييمات (`<scale>`)، والأرقام ذات الإجابة الصحيحة (`<numeric>`)، والأسئلة المفتوحة (`<question>`). وإذا كان لديك عدد منها، فإن `<qrcode join />` على شريحة مبكرة يعرض الرمز مرة واحدة. ويحفظ `mdeck run` الإجابات في `slides.results.json` بجانب العرض.
|
|
500
500
|
:::
|