@honeydeck/honeydeck 0.4.0 → 0.6.0

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.
Files changed (71) hide show
  1. package/AGENTS.md +4 -4
  2. package/DEVELOPMENT.md +6 -4
  3. package/Readme.md +15 -15
  4. package/SPEC.md +5 -4
  5. package/docs/browser-frame.md +38 -0
  6. package/docs/components.md +16 -57
  7. package/docs/configuration.md +13 -0
  8. package/docs/customization.md +2 -0
  9. package/docs/deeper-dive.md +32 -7
  10. package/docs/getting-started.md +4 -2
  11. package/docs/index.json +258 -0
  12. package/docs/keyboard.md +35 -0
  13. package/docs/list-style.md +53 -0
  14. package/docs/local-development.md +3 -1
  15. package/docs/mermaid.md +2 -0
  16. package/docs/mobile.md +2 -0
  17. package/docs/navigation.md +3 -1
  18. package/docs/notes.md +40 -0
  19. package/docs/pdf-export.md +6 -2
  20. package/docs/presenter-mode.md +8 -3
  21. package/docs/reveal-group.md +60 -0
  22. package/docs/reveal-with.md +39 -0
  23. package/docs/reveal.md +35 -0
  24. package/docs/skills.md +5 -3
  25. package/docs/slides.md +2 -0
  26. package/docs/slidev-migration.md +5 -0
  27. package/docs/steps-and-reveals.md +145 -8
  28. package/docs/timeline-steps.md +50 -0
  29. package/package.json +6 -2
  30. package/skills/SPEC.md +6 -6
  31. package/skills/honeydeck/SKILL.md +9 -9
  32. package/skills/slidev-migration/SKILL.md +7 -6
  33. package/src/SPEC.md +8 -3
  34. package/src/cli/SPEC.md +3 -2
  35. package/src/cli/pdf.ts +11 -4
  36. package/src/remark/SPEC.md +102 -2
  37. package/src/remark/code-utils.ts +151 -0
  38. package/src/remark/shiki-code-blocks.ts +329 -136
  39. package/src/remark/step-numbering.ts +408 -103
  40. package/src/runtime/Deck.tsx +133 -116
  41. package/src/runtime/EffectiveColorModeContext.tsx +37 -0
  42. package/src/runtime/SPEC.md +21 -8
  43. package/src/runtime/SlideCanvas.tsx +19 -16
  44. package/src/runtime/SlideScaleContext.tsx +23 -0
  45. package/src/runtime/components/CodeBlock.tsx +19 -202
  46. package/src/runtime/components/CodeBlockCopyButton.tsx +64 -0
  47. package/src/runtime/components/CodeBlockShared.ts +17 -0
  48. package/src/runtime/components/Fade.tsx +51 -0
  49. package/src/runtime/components/FadeGroup.tsx +175 -0
  50. package/src/runtime/components/FadeWith.tsx +54 -0
  51. package/src/runtime/components/MagicCodeBlock.tsx +223 -0
  52. package/src/runtime/components/NavBar.tsx +1 -1
  53. package/src/runtime/components/NormalCodeBlock.tsx +128 -0
  54. package/src/runtime/components/Reveal.tsx +27 -27
  55. package/src/runtime/components/RevealGroup.tsx +143 -41
  56. package/src/runtime/components/RevealWith.tsx +63 -0
  57. package/src/runtime/components/SPEC.md +115 -10
  58. package/src/runtime/components/TimelineReveal.tsx +81 -0
  59. package/src/runtime/components/index.ts +13 -5
  60. package/src/runtime/components/timelineVisibility.ts +45 -0
  61. package/src/runtime/index.ts +9 -1
  62. package/src/runtime/navigation.ts +6 -4
  63. package/src/runtime/presentationApi.ts +449 -0
  64. package/src/runtime/views/PresenterCastButton.tsx +39 -0
  65. package/src/runtime/views/PresenterView.tsx +21 -4
  66. package/src/runtime/views/SPEC.md +7 -5
  67. package/src/theme/base.css +67 -2
  68. package/src/vite-plugin/SPEC.md +20 -2
  69. package/src/vite-plugin/index.ts +16 -2
  70. package/src/vite-plugin/splitter.ts +1 -0
  71. package/src/vite-plugin/virtual-modules.ts +16 -6
@@ -0,0 +1,258 @@
1
+ {
2
+ "generatedFrom": "packages/docs/content/docs",
3
+ "pages": [
4
+ {
5
+ "slug": "getting-started",
6
+ "title": "Getting started",
7
+ "description": "Getting started documentation for Honeydeck.",
8
+ "breadcrumbs": [
9
+ "Start",
10
+ "Getting started"
11
+ ],
12
+ "file": "getting-started.md",
13
+ "sourcePath": "packages/docs/content/docs/(start)/getting-started.mdx"
14
+ },
15
+ {
16
+ "slug": "deeper-dive",
17
+ "title": "Deeper dive",
18
+ "description": "Deeper dive documentation for Honeydeck.",
19
+ "breadcrumbs": [
20
+ "Start",
21
+ "Deeper dive"
22
+ ],
23
+ "file": "deeper-dive.md",
24
+ "sourcePath": "packages/docs/content/docs/(start)/deeper-dive.mdx"
25
+ },
26
+ {
27
+ "slug": "slides",
28
+ "title": "Slides",
29
+ "description": "Slides documentation for Honeydeck.",
30
+ "breadcrumbs": [
31
+ "Core",
32
+ "Slides"
33
+ ],
34
+ "file": "slides.md",
35
+ "sourcePath": "packages/docs/content/docs/(core)/slides.mdx"
36
+ },
37
+ {
38
+ "slug": "configuration",
39
+ "title": "Configuration",
40
+ "description": "Configuration documentation for Honeydeck.",
41
+ "breadcrumbs": [
42
+ "Core",
43
+ "Configuration"
44
+ ],
45
+ "file": "configuration.md",
46
+ "sourcePath": "packages/docs/content/docs/(core)/configuration.mdx"
47
+ },
48
+ {
49
+ "slug": "steps-and-reveals",
50
+ "title": "Steps and reveals",
51
+ "description": "Steps and reveals documentation for Honeydeck.",
52
+ "breadcrumbs": [
53
+ "Core",
54
+ "Steps and reveals"
55
+ ],
56
+ "file": "steps-and-reveals.md",
57
+ "sourcePath": "packages/docs/content/docs/(core)/steps-and-reveals.mdx"
58
+ },
59
+ {
60
+ "slug": "customization",
61
+ "title": "Customization",
62
+ "description": "Customization documentation for Honeydeck.",
63
+ "breadcrumbs": [
64
+ "Core",
65
+ "Customization"
66
+ ],
67
+ "file": "customization.md",
68
+ "sourcePath": "packages/docs/content/docs/(core)/customization.mdx"
69
+ },
70
+ {
71
+ "slug": "navigation",
72
+ "title": "Navigation",
73
+ "description": "Navigation documentation for Honeydeck.",
74
+ "breadcrumbs": [
75
+ "Core",
76
+ "Navigation"
77
+ ],
78
+ "file": "navigation.md",
79
+ "sourcePath": "packages/docs/content/docs/(core)/navigation.mdx"
80
+ },
81
+ {
82
+ "slug": "mobile",
83
+ "title": "Mobile and touch",
84
+ "description": "Mobile and touch documentation for Honeydeck.",
85
+ "breadcrumbs": [
86
+ "Core",
87
+ "Mobile and touch"
88
+ ],
89
+ "file": "mobile.md",
90
+ "sourcePath": "packages/docs/content/docs/(core)/mobile.mdx"
91
+ },
92
+ {
93
+ "slug": "presenter-mode",
94
+ "title": "Presenter mode",
95
+ "description": "Presenter mode documentation for Honeydeck.",
96
+ "breadcrumbs": [
97
+ "Core",
98
+ "Presenter mode"
99
+ ],
100
+ "file": "presenter-mode.md",
101
+ "sourcePath": "packages/docs/content/docs/(core)/presenter-mode.mdx"
102
+ },
103
+ {
104
+ "slug": "pdf-export",
105
+ "title": "PDF export",
106
+ "description": "PDF export documentation for Honeydeck.",
107
+ "breadcrumbs": [
108
+ "Core",
109
+ "PDF export"
110
+ ],
111
+ "file": "pdf-export.md",
112
+ "sourcePath": "packages/docs/content/docs/(core)/pdf-export.mdx"
113
+ },
114
+ {
115
+ "slug": "components",
116
+ "title": "Components",
117
+ "description": "Core Honeydeck components for timelines, presenter notes, browser frames, keyboard shortcuts, and styled lists.",
118
+ "breadcrumbs": [
119
+ "Components",
120
+ "Components"
121
+ ],
122
+ "file": "components.md",
123
+ "sourcePath": "packages/docs/content/docs/(components)/components.mdx"
124
+ },
125
+ {
126
+ "slug": "reveal",
127
+ "title": "Reveal",
128
+ "description": "Reveal documentation for Honeydeck.",
129
+ "breadcrumbs": [
130
+ "Components",
131
+ "Reveal"
132
+ ],
133
+ "file": "reveal.md",
134
+ "sourcePath": "packages/docs/content/docs/(components)/reveal.mdx"
135
+ },
136
+ {
137
+ "slug": "reveal-with",
138
+ "title": "RevealWith",
139
+ "description": "RevealWith documentation for Honeydeck.",
140
+ "breadcrumbs": [
141
+ "Components",
142
+ "RevealWith"
143
+ ],
144
+ "file": "reveal-with.md",
145
+ "sourcePath": "packages/docs/content/docs/(components)/reveal-with.mdx"
146
+ },
147
+ {
148
+ "slug": "reveal-group",
149
+ "title": "RevealGroup",
150
+ "description": "RevealGroup documentation for Honeydeck.",
151
+ "breadcrumbs": [
152
+ "Components",
153
+ "RevealGroup"
154
+ ],
155
+ "file": "reveal-group.md",
156
+ "sourcePath": "packages/docs/content/docs/(components)/reveal-group.mdx"
157
+ },
158
+ {
159
+ "slug": "timeline-steps",
160
+ "title": "TimelineSteps",
161
+ "description": "TimelineSteps documentation for Honeydeck.",
162
+ "breadcrumbs": [
163
+ "Components",
164
+ "TimelineSteps"
165
+ ],
166
+ "file": "timeline-steps.md",
167
+ "sourcePath": "packages/docs/content/docs/(components)/timeline-steps.mdx"
168
+ },
169
+ {
170
+ "slug": "list-style",
171
+ "title": "ListStyle",
172
+ "description": "ListStyle documentation for Honeydeck.",
173
+ "breadcrumbs": [
174
+ "Components",
175
+ "ListStyle"
176
+ ],
177
+ "file": "list-style.md",
178
+ "sourcePath": "packages/docs/content/docs/(components)/list-style.mdx"
179
+ },
180
+ {
181
+ "slug": "keyboard",
182
+ "title": "Keyboard",
183
+ "description": "Keyboard documentation for Honeydeck.",
184
+ "breadcrumbs": [
185
+ "Components",
186
+ "Keyboard"
187
+ ],
188
+ "file": "keyboard.md",
189
+ "sourcePath": "packages/docs/content/docs/(components)/keyboard.mdx"
190
+ },
191
+ {
192
+ "slug": "browser-frame",
193
+ "title": "BrowserFrame",
194
+ "description": "BrowserFrame documentation for Honeydeck.",
195
+ "breadcrumbs": [
196
+ "Components",
197
+ "BrowserFrame"
198
+ ],
199
+ "file": "browser-frame.md",
200
+ "sourcePath": "packages/docs/content/docs/(components)/browser-frame.mdx"
201
+ },
202
+ {
203
+ "slug": "notes",
204
+ "title": "Notes",
205
+ "description": "Notes documentation for Honeydeck.",
206
+ "breadcrumbs": [
207
+ "Components",
208
+ "Notes"
209
+ ],
210
+ "file": "notes.md",
211
+ "sourcePath": "packages/docs/content/docs/(components)/notes.mdx"
212
+ },
213
+ {
214
+ "slug": "local-development",
215
+ "title": "Local development",
216
+ "description": "Local development documentation for Honeydeck.",
217
+ "breadcrumbs": [
218
+ "Develop",
219
+ "Local development"
220
+ ],
221
+ "file": "local-development.md",
222
+ "sourcePath": "packages/docs/content/docs/(develop)/local-development.mdx"
223
+ },
224
+ {
225
+ "slug": "skills",
226
+ "title": "Skills",
227
+ "description": "Skills documentation for Honeydeck.",
228
+ "breadcrumbs": [
229
+ "Advanced",
230
+ "Skills"
231
+ ],
232
+ "file": "skills.md",
233
+ "sourcePath": "packages/docs/content/docs/(advanced)/skills.mdx"
234
+ },
235
+ {
236
+ "slug": "slidev-migration",
237
+ "title": "Slidev migration",
238
+ "description": "Slidev migration documentation for Honeydeck.",
239
+ "breadcrumbs": [
240
+ "Advanced",
241
+ "Slidev migration"
242
+ ],
243
+ "file": "slidev-migration.md",
244
+ "sourcePath": "packages/docs/content/docs/(advanced)/slidev-migration.mdx"
245
+ },
246
+ {
247
+ "slug": "mermaid",
248
+ "title": "Mermaid",
249
+ "description": "Mermaid documentation for Honeydeck.",
250
+ "breadcrumbs": [
251
+ "Advanced",
252
+ "Mermaid"
253
+ ],
254
+ "file": "mermaid.md",
255
+ "sourcePath": "packages/docs/content/docs/(advanced)/mermaid.mdx"
256
+ }
257
+ ]
258
+ }
@@ -0,0 +1,35 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/keyboard.mdx. Do not edit by hand. -->
2
+
3
+ # Keyboard
4
+
5
+ Use `<Keyboard>` to show one key or a shortcut in slide prose.
6
+
7
+ <KeyboardPlayground />
8
+
9
+ ```mdx
10
+ import { Keyboard } from '@honeydeck/honeydeck'
11
+
12
+ Press <Keyboard>Esc</Keyboard> to close overview.
13
+
14
+ Advance with <Keyboard keys="Space" />.
15
+
16
+ Open command palette with <Keyboard keys={["Ctrl", "Shift", "P"]} />.
17
+ ```
18
+
19
+ `keys` accepts a single value or an ordered array. When `keys` is omitted, `children` is rendered as one key. Array values render one `<kbd>` per key, separated by `+` by default:
20
+
21
+ ```mdx
22
+ <Keyboard keys={["⌘", "K"]} />
23
+ <Keyboard keys={["Ctrl", "Alt", "Delete"]} separator=" " />
24
+ ```
25
+
26
+ ## Props
27
+
28
+ | Prop | Type | Default | Description |
29
+ | --- | --- | --- | --- |
30
+ | `keys` | `ReactNode \| ReactNode[]` | — | Key label or ordered shortcut key labels. |
31
+ | `children` | `ReactNode` | — | Single key label when `keys` is omitted. |
32
+ | `separator` | `ReactNode` | `+` | Separator rendered between array entries. |
33
+ | `className` | `string` | — | Custom class for the outer wrapper. |
34
+
35
+ The component uses semantic `<kbd>` markup, is inline by default, uses Honeydeck theme styling, and does not add timeline steps.
@@ -0,0 +1,53 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/list-style.mdx. Do not edit by hand. -->
2
+
3
+ # ListStyle
4
+
5
+ Use `<ListStyle>` to style Markdown, HTML, or JSX lists inside a wrapper.
6
+
7
+ <ListStylePlayground />
8
+
9
+ By default it removes native markers:
10
+
11
+ ```mdx
12
+ import { ListStyle } from '@honeydeck/honeydeck'
13
+
14
+ <ListStyle>
15
+ - No marker
16
+ - Still aligned
17
+ </ListStyle>
18
+ ```
19
+
20
+ Pass `bullets` to render custom markers:
21
+
22
+ ```mdx
23
+ import { ListStyle } from '@honeydeck/honeydeck'
24
+ import { CheckIcon, CircleIcon } from 'lucide-react'
25
+
26
+ <ListStyle bullets={[<CheckIcon />, <CircleIcon />]}>
27
+ - Level one uses a check icon
28
+ - Level two uses a circle icon
29
+ </ListStyle>
30
+
31
+ <ListStyle bullets={["→", "–", "·"]}>
32
+ - Level one
33
+ - Level two
34
+ - Level three
35
+ </ListStyle>
36
+ ```
37
+
38
+ ## Props
39
+
40
+ | Prop | Type | Default | Description |
41
+ | --- | --- | --- | --- |
42
+ | `children` | `ReactNode` | — | List content to style. |
43
+ | `bullets` | `ReactNode \| ReactNode[] \| false \| "none" \| null` | `undefined` | Marker config. Omit it, pass `false`, `"none"`, or `null` for markerless lists. |
44
+ | `className` | `string` | — | Custom class for the wrapper. |
45
+ | `style` | `CSSProperties` | — | Inline style for the wrapper. |
46
+
47
+ ## Behavior
48
+
49
+ - Native list markers are removed for all nested lists in the wrapper.
50
+ - A single `bullets` value is reused for every nesting level.
51
+ - An array uses one marker per nesting level.
52
+ - Deeper levels reuse the last configured marker.
53
+ - Custom markers apply to authored list elements passed as children.
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(develop)/local-development.mdx. Do not edit by hand. -->
2
+
1
3
  # Local development
2
4
 
3
5
  This guide explains how to test Honeydeck locally before it is published to npm.
@@ -19,7 +21,7 @@ npm install
19
21
  npm run dev
20
22
  ```
21
23
 
22
- Root `npm run dev` starts the private showcase deck package and the marketing/docs site together.
24
+ Root `npm run dev` starts the private showcase deck package and the docs site together.
23
25
 
24
26
  To run only the showcase deck:
25
27
 
package/docs/mermaid.md CHANGED
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(advanced)/mermaid.mdx. Do not edit by hand. -->
2
+
1
3
  # Mermaid
2
4
 
3
5
  Mermaid is not part of Honeydeck core. Use it as a normal project dependency and render diagrams through a local React component that you import from your deck.
package/docs/mobile.md CHANGED
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(core)/mobile.mdx. Do not edit by hand. -->
2
+
1
3
  # Mobile and Touch
2
4
 
3
5
  Honeydeck works on phones and tablets, but mobile presentation mode behaves differently from desktop so touch gestures stay reliable.
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(core)/navigation.mdx. Do not edit by hand. -->
2
+
1
3
  # Navigation
2
4
 
3
5
  ## Keyboard Shortcuts
@@ -9,7 +11,7 @@
9
11
  | `↓` / `s` | Next slide |
10
12
  | `↑` / `w` | Previous slide |
11
13
  | `o` | Toggle overview mode |
12
- | `p` | Open presenter mode (new window) |
14
+ | `p` | Open presenter mode (same tab) |
13
15
  | `f` | Toggle fullscreen |
14
16
  | `Escape` | Exit overview / exit fullscreen |
15
17
 
package/docs/notes.md ADDED
@@ -0,0 +1,40 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/notes.mdx. Do not edit by hand. -->
2
+
3
+ # Notes
4
+
5
+ Use `<Notes>` to add presenter-only speaker notes to a slide.
6
+
7
+ <NotesPlayground />
8
+
9
+ ```mdx
10
+ import { Notes } from '@honeydeck/honeydeck'
11
+
12
+ # Launch plan
13
+
14
+ - What changed
15
+ - Why it matters
16
+
17
+ <Notes>
18
+ # Demo cue
19
+
20
+ - Demo the interactive component.
21
+ - Mention PDF export.
22
+ </Notes>
23
+ ```
24
+
25
+ Notes render nothing in audience view, overview thumbnails, and normal PDF output. In presenter mode, Markdown inside `<Notes>` renders as formatted speaker notes, including headings, paragraphs, lists, links, inline code, code blocks, and block quotes.
26
+
27
+ ## Props
28
+
29
+ | Prop | Type | Default | Description |
30
+ | --- | --- | --- | --- |
31
+ | `children` | `ReactNode` | — | Speaker-note content collected by presenter mode. |
32
+
33
+ ## Behavior
34
+
35
+ - `<Notes>` is a no-op outside presenter mode.
36
+ - Notes are collected from the current slide preview in presenter mode.
37
+ - Updating the slide notes updates the presenter notes panel.
38
+ - You can use Markdown inside Notes.
39
+
40
+ See [Presenter mode](presenter-mode.md) for the full presenter workflow.
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(core)/pdf-export.mdx. Do not edit by hand. -->
2
+
1
3
  # PDF Export
2
4
 
3
5
  ## How It Works
@@ -51,14 +53,16 @@ Honeydeck builds an ordered capture plan before taking screenshots. The final PD
51
53
 
52
54
  When `pdfSteps: all`:
53
55
 
54
- - Each `Reveal`/`RevealGroup` step becomes a separate page.
56
+ - Each `Reveal`/`RevealGroup` step becomes a separate page. `RevealWith` appears on the page for its target step and adds no extra page.
55
57
  - Stepped code blocks show their first highlight group on the baseline page; each later code highlight group becomes a separate page.
56
- - Both use the same underlying timeline.
58
+ - Magic Code blocks show their first inner code fence on the baseline page; later line-highlight states and code morph states become separate pages according to the same timeline.
59
+ - Reveals, stepped code blocks, Magic Code, and custom `TimelineSteps` blocks use the same underlying timeline.
57
60
 
58
61
  When `pdfSteps: final` (default):
59
62
 
60
63
  - All reveals shown in final (visible) state.
61
64
  - Code blocks shown with final highlight applied.
65
+ - Magic Code blocks shown at their final code state with final highlight applied.
62
66
  - `useTimeline()` and `useTimelineSteps()` expose `isPdfFinalRender: true`, so
63
67
  custom step-driven components can render an all-open/all-visible PDF state.
64
68
 
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(core)/presenter-mode.mdx. Do not edit by hand. -->
2
+
1
3
  # Presenter Mode
2
4
 
3
5
  ## Overview
@@ -29,6 +31,7 @@ Includes:
29
31
  - Slide number / step counter
30
32
  - Wall clock
31
33
  - Button to open audience view in a new tab/window
34
+ - Button to cast the audience view to a secondary display when supported; the same control becomes a stop button while casting and is disabled with a hint when unsupported
32
35
  - Navigation buttons that move through the timeline while staying in presenter mode
33
36
 
34
37
  ## Speaker Notes
@@ -58,11 +61,11 @@ Content here.
58
61
 
59
62
  ## Opening Presenter Mode
60
63
 
61
- - Keyboard shortcut `p` from normal presentation → opens in a new window/tab.
64
+ - Keyboard shortcut `p` from normal presentation → opens presenter mode in the current tab.
62
65
  - Navigation controls button in normal presentation.
63
66
  - Direct URL: `/#/presenter/1/0`
64
67
 
65
- Pressing `p` opens presenter mode in a **new window** so the audience view stays on the projector.
68
+ Pressing `p` opens presenter mode in the **current tab**.
66
69
 
67
70
  ## Navigation
68
71
 
@@ -85,10 +88,12 @@ When no next timeline state exists, the `Next` preview shows an end-of-deck plac
85
88
 
86
89
  ## Presenter/Audience Sync
87
90
 
88
- Presenter mode and audience view synchronize navigation via `BroadcastChannel` in the same browser/profile.
91
+ Presenter mode and audience view synchronize navigation via `BroadcastChannel` and, when supported, the Presentation API.
89
92
 
90
93
  - Presenter mode acts as the controller.
91
94
  - Audience view (opened from presenter mode) listens for navigation updates.
95
+ - The cast audience sends a `sync-request` as soon as the receiver connection appears; the presenter replies with the current slide/step in a `sync-response` so late connections resync immediately.
96
+ - The cast audience follows presenter navigation through Presentation API receiver messages.
92
97
  - No server, internet, WebSocket, or device pairing required.
93
98
  - If `BroadcastChannel` is unavailable, both views function independently.
94
99
 
@@ -0,0 +1,60 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/reveal-group.mdx. Do not edit by hand. -->
2
+
3
+ # RevealGroup
4
+
5
+ Use `<RevealGroup>` when a short sequence should appear one item at a time.
6
+
7
+ ```mdx
8
+ import { RevealGroup } from '@honeydeck/honeydeck'
9
+
10
+ <RevealGroup>
11
+ - First point
12
+ - Second point
13
+ - Third point
14
+ </RevealGroup>
15
+ ```
16
+
17
+ Each meaningful direct child becomes one timeline step. Whitespace-only text children are ignored. Markdown, HTML, and JSX lists are special: each top-level list item is revealed one after another while preserving the list container.
18
+
19
+ Use `listRevealMode="nested"` when nested list items should also become individual steps:
20
+
21
+ ```mdx
22
+ <RevealGroup listRevealMode="nested">
23
+ - Parent
24
+ - Child A
25
+ - Child B
26
+ - Sibling
27
+ </RevealGroup>
28
+ ```
29
+
30
+ Timeline: parent → child A → child B → sibling. The default mode is `"direct"`, which keeps nested items grouped with their parent.
31
+
32
+ To reveal multiple elements together, wrap them in one direct child:
33
+
34
+ ```mdx
35
+ <RevealGroup>
36
+ <div>
37
+ <h3>One idea</h3>
38
+ <p>Supporting context appears with it.</p>
39
+ </div>
40
+ <div>Next idea</div>
41
+ </RevealGroup>
42
+ ```
43
+
44
+ Nested timeline entries inside a group target are flattened after that target and before the following group target:
45
+
46
+ ```mdx
47
+ <RevealGroup>
48
+ <div>
49
+ Parent item
50
+ <Reveal>Nested detail</Reveal>
51
+ </div>
52
+ <div>Sibling item</div>
53
+ </RevealGroup>
54
+ ```
55
+
56
+ **Timeline:**
57
+
58
+ 1. Parent item appears
59
+ 2. Nested detail appears
60
+ 3. Sibling item appears
@@ -0,0 +1,39 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/reveal-with.mdx. Do not edit by hand. -->
2
+
3
+ # RevealWith
4
+
5
+ Use `<RevealWith>` when content should appear at the same timeline step as a named `<Reveal>` or any existing numeric slide step. It never adds a new step.
6
+
7
+ ````mdx
8
+ import { Reveal, RevealWith } from '@honeydeck/honeydeck'
9
+
10
+ <Reveal name="intro">Intro appears first</Reveal>
11
+ <RevealWith target="intro">This appears with the intro reveal</RevealWith>
12
+
13
+ ```ts {1|2|3}
14
+ const answer = 42
15
+ console.log(answer)
16
+ ```
17
+
18
+ <RevealWith at={2}>This appears with step 2</RevealWith>
19
+ ````
20
+
21
+ ## Props
22
+
23
+ | Prop | Type | Default | Description |
24
+ | --- | --- | --- | --- |
25
+ | `target` | `string` | — | Same-slide `<Reveal name="...">` target. Must be a literal non-empty string. Use exactly one of `target` or `at`. |
26
+ | `at` | `number` | resolved/injected | Existing 1-based slide-local timeline step. Must be a literal positive integer when authored. Use exactly one of `target` or `at`. |
27
+ | `children` | `ReactNode` | — | Content to reveal with the target step. |
28
+ | `className` | `string` | — | Custom class for styling or transitions. |
29
+ | `as` | `"div" | "span"` | injected | Wrapper element. Honeydeck injects this to keep valid MDX/HTML around block or inline content. |
30
+
31
+ ## Behavior
32
+
33
+ - `RevealWith` is cumulative like `Reveal`: once visible, it stays visible.
34
+ - `target` supports forward references to named reveals later on the same slide.
35
+ - `at` can target any existing slide step, including a `RevealGroup` item, code highlight, Magic Code state, or `TimelineSteps` state.
36
+ - Hidden content reserves layout space and uses the same fade/future-preview behavior as `Reveal`.
37
+ - Invalid targets, duplicate reveal names, non-literal values, and out-of-range numeric steps are build errors.
38
+
39
+ See [Steps and reveals](steps-and-reveals.md#revealwith) for timeline ordering examples.
package/docs/reveal.md ADDED
@@ -0,0 +1,35 @@
1
+ <!-- Generated from packages/docs/content/docs/(components)/reveal.mdx. Do not edit by hand. -->
2
+
3
+ # Reveal
4
+
5
+ Use `<Reveal>` when content should appear at the next timeline step.
6
+
7
+ ```mdx
8
+ import { Reveal } from '@honeydeck/honeydeck'
9
+
10
+ <Reveal>Start with Markdown</Reveal>
11
+ <Reveal>Enhance with React</Reveal>
12
+ <Reveal>Export to PDF</Reveal>
13
+ ```
14
+
15
+ Reveals are cumulative: once visible, they stay visible while you advance through the slide. Hidden reveal content reserves layout space, so the slide does not jump when the content appears.
16
+
17
+ ## Props
18
+
19
+ | Prop | Type | Default | Description |
20
+ | --- | --- | --- | --- |
21
+ | `children` | `ReactNode` | — | Content to reveal. |
22
+ | `name` | `string` | — | Optional slide-local target for [`RevealWith target="..."`](reveal-with.md). Must be a literal non-empty string. |
23
+ | `className` | `string` | — | Custom class for styling or transitions. |
24
+ | `at` | `number` | injected | Timeline step. Honeydeck injects this during compilation; author-authored values are build errors. Use [`RevealWith`](reveal-with.md) to sync with an existing step. |
25
+ | `as` | `"div" \| "span"` | injected | Wrapper element. Honeydeck injects this to keep valid MDX/HTML around block or inline content. |
26
+
27
+ ## Behavior
28
+
29
+ - Reveals fade in.
30
+ - Hidden content uses `visibility: hidden` plus `opacity: 0`, not `display: none`.
31
+ - Nested reveals are supported.
32
+ - Inline reveals inside paragraphs render inline wrappers.
33
+ - Optional `name="..."` creates a slide-local target for [`RevealWith`](reveal-with.md).
34
+
35
+ See [Steps and reveals](steps-and-reveals.md) for timeline ordering examples.
package/docs/skills.md CHANGED
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(advanced)/skills.mdx. Do not edit by hand. -->
2
+
1
3
  # Skills
2
4
 
3
5
  Honeydeck ships optional agent skills that help AI coding agents work with presentations more reliably. They are plain skill files bundled with the `@honeydeck/honeydeck` package, so you can install them into a deck project or into your global agent setup.
@@ -31,9 +33,9 @@ npx skills add <honeydeck-repo-url> --copy --skill slidev-migration
31
33
 
32
34
  | Skill | Use it for |
33
35
  | --- | --- |
34
- | `honeydeck` | Honeydeck-specific guidance for MDX decks, layouts, CSS imports, presenter notes, reveals, code steps, PDF export, and package docs. |
36
+ | `honeydeck` | Honeydeck-specific guidance for MDX decks, layouts, CSS imports, presenter notes, reveals, code steps, Magic Code, PDF export, public docs, and package specs. |
35
37
  | `presentation-writing` | Framework-agnostic help with audience, storyline, slide headlines, speaker notes, timing, and review heuristics. |
36
- | `slidev-migration` | Migrating Slidev decks to Honeydeck while preserving source files until you approve cleanup. |
38
+ | `slidev-migration` | Migrating Slidev decks to Honeydeck, including rewriting Slidev `md magic-move` blocks to Honeydeck `md magic-code`, while preserving source files until you approve cleanup. |
37
39
 
38
40
  The `honeydeck` and `presentation-writing` skills work well together: one keeps the agent inside Honeydeck conventions, while the other improves the story and delivery. Add `slidev-migration` when you are converting an existing Slidev project.
39
41
 
@@ -48,7 +50,7 @@ For example, an agent with the `honeydeck` skill should prefer:
48
50
  - slide frontmatter for layouts
49
51
  - explicit imports from `@honeydeck/honeydeck`
50
52
  - `<Notes>` for speaker notes
51
- - `<Reveal>`, `<RevealGroup>`, and code metadata for steps
53
+ - `<Reveal>`, `<RevealGroup>`, code metadata, and Magic Code for steps
52
54
  - `honeydeck pdf` for PDF export
53
55
 
54
56
  The skills also point agents back to the packaged docs and specs, so generated deck changes can stay aligned with the installed Honeydeck version.
package/docs/slides.md CHANGED
@@ -1,3 +1,5 @@
1
+ <!-- Generated from packages/docs/content/docs/(core)/slides.mdx. Do not edit by hand. -->
2
+
1
3
  # Slides
2
4
 
3
5
  ## Basics