@honeydeck/honeydeck 0.1.2 → 0.3.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.
- package/AGENTS.md +1 -2
- package/DEVELOPMENT.md +0 -2
- package/Readme.md +3 -3
- package/SPEC.md +3 -3
- package/docs/customization.md +413 -0
- package/docs/{next-steps.md → deeper-dive.md} +13 -18
- package/docs/getting-started.md +16 -7
- package/docs/skills.md +65 -0
- package/docs/slidev-migration.md +1 -1
- package/package.json +1 -2
- package/skills/SPEC.md +3 -2
- package/skills/honeydeck/SKILL.md +3 -3
- package/skills/slidev-migration/SKILL.md +2 -2
- package/src/cli/index.ts +1 -1
- package/src/layouts/SPEC.md +46 -117
- package/src/runtime/SPEC.md +2 -1
- package/src/runtime/components/NavBar.tsx +93 -81
- package/src/runtime/views/SPEC.md +1 -1
- package/docs/kit-authoring.md +0 -207
- package/docs/kits.md +0 -387
package/AGENTS.md
CHANGED
|
@@ -18,8 +18,7 @@ From repo root:
|
|
|
18
18
|
npm -w @honeydeck/honeydeck run dev
|
|
19
19
|
npm -w @honeydeck/honeydeck run test
|
|
20
20
|
npm -w @honeydeck/honeydeck run typecheck
|
|
21
|
-
npm -w @honeydeck/honeydeck run build
|
|
22
21
|
npm -w @honeydeck/honeydeck run pack:dry-run
|
|
23
22
|
```
|
|
24
23
|
|
|
25
|
-
For full monorepo gates use root workspace scripts: `npm run lint`, `npm run typecheck`, `npm test`, `npm run build`, and `npm run pack:dry-run`.
|
|
24
|
+
For full monorepo gates use root workspace scripts: `npm run lint`, `npm run typecheck`, `npm test`, `npm run build`, and `npm run pack:dry-run`. Root `npm run build` runs only workspaces that define a build script.
|
package/DEVELOPMENT.md
CHANGED
|
@@ -87,7 +87,6 @@ npx playwright install chromium
|
|
|
87
87
|
|
|
88
88
|
| Script | Purpose |
|
|
89
89
|
|--------|---------|
|
|
90
|
-
| `npm run build` | Run the package TypeScript build gate |
|
|
91
90
|
| `npm run dev` | Run source CLI against starter template deck |
|
|
92
91
|
| `npm run dev:init` | Run source CLI against starter template deck |
|
|
93
92
|
| `npm run format` | Format/lint with Biome and write fixes |
|
|
@@ -114,7 +113,6 @@ npm run format
|
|
|
114
113
|
npm run lint
|
|
115
114
|
npm run typecheck
|
|
116
115
|
npm test
|
|
117
|
-
npm run build
|
|
118
116
|
npm run pack:dry-run
|
|
119
117
|
```
|
|
120
118
|
|
package/Readme.md
CHANGED
|
@@ -19,18 +19,18 @@ Decks are plain MDX files separated into slides with `---`; see the first deck e
|
|
|
19
19
|
## Documentation
|
|
20
20
|
|
|
21
21
|
- [Getting started](docs/getting-started.md) - first deck, first commands, and the shortest path to presenting
|
|
22
|
-
- [
|
|
22
|
+
- [Deeper dive](docs/deeper-dive.md) - CLI options, authoring patterns, imports, themes, architecture, and agent skills
|
|
23
23
|
- [Slides](docs/slides.md) - separators, multiple files, layouts, and assets
|
|
24
24
|
- [Configuration](docs/configuration.md) - deck-level and slide-level frontmatter
|
|
25
25
|
- [Steps and reveals](docs/steps-and-reveals.md) - timeline, reveal groups, code steps, and PDF behavior
|
|
26
26
|
- [Components](docs/components.md) - core Honeydeck components such as `BrowserFrame` and `Keyboard`
|
|
27
|
-
- [
|
|
28
|
-
- [Kit authoring](docs/kit-authoring.md) - layout maps, layout props, demos, and design tokens for kit authors
|
|
27
|
+
- [Customization](docs/customization.md) - themes, layout sets, Tailwind tokens, custom layouts, and layout demos
|
|
29
28
|
- [Navigation](docs/navigation.md) - keyboard, touch, overview mode, and URL state
|
|
30
29
|
- [Mobile and touch](docs/mobile.md) - mobile controls, touch gestures, and pinch zoom
|
|
31
30
|
- [Presenter mode](docs/presenter-mode.md) - notes, presenter window, sync, and mobile behavior
|
|
32
31
|
- [PDF export](docs/pdf-export.md) - options, color modes, and step handling
|
|
33
32
|
- [Local development](docs/local-development.md) - running Honeydeck from this repository
|
|
33
|
+
- [Skills](docs/skills.md) - optional agent skills for authoring, writing, and migration help
|
|
34
34
|
- [Slidev migration](docs/slidev-migration.md) - moving from Slidev with the bundled agent skill
|
|
35
35
|
|
|
36
36
|
## Common commands
|
package/SPEC.md
CHANGED
|
@@ -42,7 +42,7 @@ The Honeydeck specification is distributed:
|
|
|
42
42
|
- `react`, `react-dom`, and Tailwind are peer dependencies of `honeydeck`.
|
|
43
43
|
- Honeydeck wires the Tailwind Vite plugin internally, but Tailwind/theme CSS is only loaded when user-authored CSS imports it; generated projects install `tailwindcss` and import `./styles.css` from `deck.mdx`.
|
|
44
44
|
- Generated projects use compatible semver ranges for React, Tailwind, TypeScript, and types.
|
|
45
|
-
-
|
|
45
|
+
- Custom themes, layouts, and components are plain CSS/TypeScript modules; installed-package usage is handled by standard package metadata rather than by a Honeydeck-specific mechanism.
|
|
46
46
|
- Icons come from `lucide-react` and must use suffixed `...Icon` component exports (for example `ChevronLeftIcon`), not inline SVG path helpers, emoji glyphs, or unsuffixed aliases.
|
|
47
47
|
|
|
48
48
|
---
|
|
@@ -59,7 +59,7 @@ The Honeydeck specification is distributed:
|
|
|
59
59
|
| Runtime | [`src/runtime/SPEC.md`](src/runtime/SPEC.md) | timeline semantics, keyboard/touch navigation, SPA/build behavior, runtime errors |
|
|
60
60
|
| Runtime components | [`src/runtime/components/SPEC.md`](src/runtime/components/SPEC.md) | `Reveal`, `RevealGroup`, `TimelineSteps`, `ListStyle`, `Keyboard`, `BrowserFrame`, `Notes` |
|
|
61
61
|
| Runtime views | [`src/runtime/views/SPEC.md`](src/runtime/views/SPEC.md) | presenter mode, overview mode, theme/layout/component reference pages |
|
|
62
|
-
| Layouts and
|
|
62
|
+
| Layouts and customization | [`src/layouts/SPEC.md`](src/layouts/SPEC.md) | custom theme/layout/component model, built-in layouts, layout props, demos, layout resolution |
|
|
63
63
|
| Theme | [`src/theme/SPEC.md`](src/theme/SPEC.md) | design tokens, base theme CSS, Tailwind mapping, color mode behavior |
|
|
64
64
|
| Public exports | [`src/SPEC.md`](src/SPEC.md) | import paths and public TypeScript types |
|
|
65
65
|
| Public release governance | Repository root `.github/SPEC.md` | protected branch, CI checks, PR title contract, publishing automation; repository-only, not shipped in the npm package |
|
|
@@ -80,7 +80,7 @@ The Honeydeck specification is distributed:
|
|
|
80
80
|
Honeydeck prioritizes:
|
|
81
81
|
|
|
82
82
|
1. **Zero to presenting** — a plain `deck.mdx` works with built-in layouts, even before CSS is imported.
|
|
83
|
-
2. **Progressive power** — add explicit CSS imports, React, custom layout maps
|
|
83
|
+
2. **Progressive power** — add explicit CSS imports, React components, and custom layout maps as needed.
|
|
84
84
|
3. **Explicit composition** — see imports and configuration; no user-content auto-discovery and no automatic theme CSS injection.
|
|
85
85
|
4. **Presentation-native** — timeline, steps, presenter mode, runtime reference pages, and PDF export built in.
|
|
86
86
|
5. **Fun** — starter sparkle button, tasteful CLI output, playful defaults.
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
# Customization
|
|
2
|
+
|
|
3
|
+
Honeydeck starts with built-in layouts and a small base theme. Customize only what you need: CSS tokens, React components, or a layout map.
|
|
4
|
+
|
|
5
|
+
## Mental model
|
|
6
|
+
|
|
7
|
+
| Concern | What you write | How you use it |
|
|
8
|
+
|---------|----------------|----------------|
|
|
9
|
+
| Theme | CSS files with Honeydeck tokens and Tailwind utilities | import CSS from `deck.mdx` or from another CSS file |
|
|
10
|
+
| Components | React components | import them in MDX |
|
|
11
|
+
| Layouts | React layout components in a layout map | set `layouts:` in deck frontmatter, then choose `layout:` per slide |
|
|
12
|
+
|
|
13
|
+
All references are explicit. Local files and installed packages work the same way: import the module you want.
|
|
14
|
+
|
|
15
|
+
## Start with CSS
|
|
16
|
+
|
|
17
|
+
The starter deck imports `./styles.css` from `deck.mdx`:
|
|
18
|
+
|
|
19
|
+
```mdx
|
|
20
|
+
import './styles.css'
|
|
21
|
+
|
|
22
|
+
# Hello world
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
A typical styles file imports Tailwind and the Honeydeck base theme:
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
@import "tailwindcss";
|
|
29
|
+
@import "@honeydeck/honeydeck/theme.css";
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Override tokens after the base theme:
|
|
33
|
+
|
|
34
|
+
```css
|
|
35
|
+
@import "tailwindcss";
|
|
36
|
+
@import "@honeydeck/honeydeck/theme.css";
|
|
37
|
+
|
|
38
|
+
:root {
|
|
39
|
+
--honeydeck-primary: oklch(55% 0.25 280);
|
|
40
|
+
--honeydeck-font-heading: "Playfair Display", serif;
|
|
41
|
+
--honeydeck-border-radius: 1rem;
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Target light and dark modes when needed:
|
|
46
|
+
|
|
47
|
+
```css
|
|
48
|
+
[data-honeydeck-color-mode="light"] {
|
|
49
|
+
--honeydeck-primary: oklch(50% 0.2 250);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
[data-honeydeck-color-mode="dark"] {
|
|
53
|
+
--honeydeck-primary: oklch(70% 0.2 250);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Bundled themes and layouts
|
|
58
|
+
|
|
59
|
+
The default visual style is clean black, white, and grey:
|
|
60
|
+
|
|
61
|
+
```css
|
|
62
|
+
@import "tailwindcss";
|
|
63
|
+
@import "@honeydeck/honeydeck/theme.css";
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`@honeydeck/honeydeck/themes/clean.css` is available as an optional named clean layer.
|
|
67
|
+
|
|
68
|
+
The Bee theme adds the original playful palette:
|
|
69
|
+
|
|
70
|
+
```css
|
|
71
|
+
@import "tailwindcss";
|
|
72
|
+
@import "@honeydeck/honeydeck/theme.css";
|
|
73
|
+
@import "@honeydeck/honeydeck/themes/bee.css";
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Use the matching Bee layout set when you want Bee slide chrome too:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
---
|
|
80
|
+
layouts: "@honeydeck/honeydeck/layouts/bee"
|
|
81
|
+
---
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The default clean layout set is available through either path:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
---
|
|
88
|
+
layouts: "@honeydeck/honeydeck/layouts"
|
|
89
|
+
---
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
---
|
|
94
|
+
layouts: "@honeydeck/honeydeck/layouts/clean"
|
|
95
|
+
---
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Tailwind token utilities
|
|
99
|
+
|
|
100
|
+
Honeydeck maps theme tokens to Tailwind utilities:
|
|
101
|
+
|
|
102
|
+
```mdx
|
|
103
|
+
<div className="rounded-honeydeck border border-border bg-surface p-6 text-surface-foreground">
|
|
104
|
+
Styled with Honeydeck tokens.
|
|
105
|
+
</div>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Useful color utilities include `primary`, `primary-foreground`, `accent`, `accent-foreground`, `background`, `foreground`, `surface`, `surface-foreground`, and `border`.
|
|
109
|
+
|
|
110
|
+
## Design tokens
|
|
111
|
+
|
|
112
|
+
Themes provide CSS custom properties. Colors derive from a primary using `oklch` relative color syntax, with separate values for light and dark modes:
|
|
113
|
+
|
|
114
|
+
```css
|
|
115
|
+
[data-honeydeck-color-mode="light"] {
|
|
116
|
+
--honeydeck-primary: oklch(50% 0.2 250);
|
|
117
|
+
--honeydeck-background: oklch(from var(--honeydeck-primary) 98% 0.01 h);
|
|
118
|
+
--honeydeck-foreground: oklch(from var(--honeydeck-primary) 15% 0.02 h);
|
|
119
|
+
--honeydeck-surface: oklch(from var(--honeydeck-primary) 94% 0.02 h);
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
| Token | Purpose |
|
|
124
|
+
|-------|---------|
|
|
125
|
+
| `--honeydeck-primary` | Brand color for this mode |
|
|
126
|
+
| `--honeydeck-primary-foreground` | Text on primary backgrounds |
|
|
127
|
+
| `--honeydeck-background` | Main slide background |
|
|
128
|
+
| `--honeydeck-foreground` | Main text color |
|
|
129
|
+
| `--honeydeck-surface` | Cards, code blocks, callouts |
|
|
130
|
+
| `--honeydeck-surface-foreground` | Text on surfaces |
|
|
131
|
+
| `--honeydeck-border` | Border/divider color |
|
|
132
|
+
| `--honeydeck-accent` | Accent, computed as complementary by default |
|
|
133
|
+
| `--honeydeck-accent-foreground` | Text on accent backgrounds |
|
|
134
|
+
| `--honeydeck-link-color` | Link color, defaulting to inherit |
|
|
135
|
+
| `--honeydeck-border-radius` | Default border radius |
|
|
136
|
+
| `--honeydeck-font-heading` | Heading font family |
|
|
137
|
+
| `--honeydeck-font-body` | Body font family |
|
|
138
|
+
| `--honeydeck-font-mono` | Monospace font family |
|
|
139
|
+
| `--honeydeck-font-base` | Base font size, defaulting to `16px` |
|
|
140
|
+
| `--honeydeck-font-scale` | Heading scale factor, defaulting to `1.25` |
|
|
141
|
+
| `--honeydeck-code-line-dim-opacity` | Dim opacity for non-highlighted code lines |
|
|
142
|
+
|
|
143
|
+
## Use built-in layouts
|
|
144
|
+
|
|
145
|
+
Select a layout in slide frontmatter:
|
|
146
|
+
|
|
147
|
+
```mdx
|
|
148
|
+
---
|
|
149
|
+
layout: Section
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
# Big idea
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
If no `layout:` is specified, `Default` is used. Layout names are PascalCase.
|
|
156
|
+
|
|
157
|
+
| Layout | Description |
|
|
158
|
+
|--------|-------------|
|
|
159
|
+
| `Blank` | Empty slide with only children |
|
|
160
|
+
| `Default` | Title top-left, body flows below |
|
|
161
|
+
| `Section` | Big centered heading for section breaks |
|
|
162
|
+
| `Cover` | Opening/closing slide with title, body, author, and date |
|
|
163
|
+
| `TwoCol` | Two equal columns |
|
|
164
|
+
| `Image` | Prominent image with optional title and caption/content |
|
|
165
|
+
| `ImageLeft` | Prominent left image with title and body on the right |
|
|
166
|
+
| `ImageRight` | Prominent right image with title and body on the left |
|
|
167
|
+
|
|
168
|
+
Extra slide frontmatter fields are passed to the selected layout:
|
|
169
|
+
|
|
170
|
+
```mdx
|
|
171
|
+
---
|
|
172
|
+
layout: Cover
|
|
173
|
+
author: You_Name_Here
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
# Honeydeck
|
|
177
|
+
|
|
178
|
+
A modern slide framework.
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Two-column slides
|
|
182
|
+
|
|
183
|
+
`TwoCol` uses slot components from the active layout set:
|
|
184
|
+
|
|
185
|
+
```mdx
|
|
186
|
+
---
|
|
187
|
+
layout: TwoCol
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
import { Left, Right } from '@honeydeck/honeydeck/layouts/TwoCol'
|
|
191
|
+
|
|
192
|
+
<Left>
|
|
193
|
+
## Benefits
|
|
194
|
+
- Fast iteration
|
|
195
|
+
- Live reload
|
|
196
|
+
</Left>
|
|
197
|
+
|
|
198
|
+
<Right>
|
|
199
|
+
## Trade-offs
|
|
200
|
+
- Requires Node.js
|
|
201
|
+
</Right>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
For Bee layouts, import slots from the Bee path:
|
|
205
|
+
|
|
206
|
+
```mdx
|
|
207
|
+
import { Left, Right } from '@honeydeck/honeydeck/layouts/bee/TwoCol'
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Image slides
|
|
211
|
+
|
|
212
|
+
`Image`, `ImageLeft`, and `ImageRight` accept `image`, `darkImage`, and `alt` frontmatter:
|
|
213
|
+
|
|
214
|
+
```mdx
|
|
215
|
+
---
|
|
216
|
+
layout: ImageRight
|
|
217
|
+
image: /photos/launch.jpg
|
|
218
|
+
darkImage: /photos/launch-dark.jpg
|
|
219
|
+
alt: Launch moment
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
# Launch moment
|
|
223
|
+
|
|
224
|
+
Supporting context sits beside the image.
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Create custom layouts
|
|
228
|
+
|
|
229
|
+
Custom layouts are React components. Use a layout map when you want `layout:` frontmatter to select them.
|
|
230
|
+
|
|
231
|
+
```tsx
|
|
232
|
+
// layouts/Hero.tsx
|
|
233
|
+
import type { LayoutProps } from '@honeydeck/honeydeck/types'
|
|
234
|
+
|
|
235
|
+
export default function HeroLayout({ title, children }: LayoutProps) {
|
|
236
|
+
return (
|
|
237
|
+
<div className="grid h-full place-items-center bg-gradient-to-br from-purple-900 to-indigo-900 p-12 text-center text-white">
|
|
238
|
+
<div>
|
|
239
|
+
{title ? <h1>{title}</h1> : null}
|
|
240
|
+
{children}
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Create a layout map:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
// layouts/index.ts
|
|
251
|
+
import type { LayoutMap } from '@honeydeck/honeydeck/types'
|
|
252
|
+
import defaultLayouts from '@honeydeck/honeydeck/layouts'
|
|
253
|
+
import HeroLayout from './Hero'
|
|
254
|
+
|
|
255
|
+
export default {
|
|
256
|
+
...defaultLayouts,
|
|
257
|
+
Hero: HeroLayout,
|
|
258
|
+
} satisfies LayoutMap
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Reference it from deck frontmatter:
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
---
|
|
265
|
+
layouts: "./layouts"
|
|
266
|
+
---
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Use it on any slide:
|
|
270
|
+
|
|
271
|
+
```mdx
|
|
272
|
+
---
|
|
273
|
+
layout: Hero
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
# Special slide
|
|
277
|
+
|
|
278
|
+
With a custom gradient background.
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
You can also import a React component directly and wrap slide content when you do not need a layout map:
|
|
282
|
+
|
|
283
|
+
```mdx
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
import { GradientPanel } from './components/GradientPanel'
|
|
287
|
+
|
|
288
|
+
<GradientPanel>
|
|
289
|
+
# Special slide
|
|
290
|
+
</GradientPanel>
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## Layout props
|
|
296
|
+
|
|
297
|
+
`LayoutProps` is generic so layouts can type their accepted frontmatter:
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
type LayoutProps<F extends Record<string, unknown> = Record<string, unknown>> = {
|
|
301
|
+
title: ReactNode | null
|
|
302
|
+
children: ReactNode
|
|
303
|
+
rawChildren: ReactNode
|
|
304
|
+
frontmatter: F
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Example typed layout:
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
import type { LayoutProps } from '@honeydeck/honeydeck/types'
|
|
312
|
+
|
|
313
|
+
type CoverFrontmatter = {
|
|
314
|
+
author?: string
|
|
315
|
+
date?: string
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export function CoverLayout({ title, children, frontmatter }: LayoutProps<CoverFrontmatter>) {
|
|
319
|
+
const { author, date } = frontmatter
|
|
320
|
+
return (/* ... */)
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Layout demos
|
|
325
|
+
|
|
326
|
+
Layouts can export a `demo` constant for `/#/layouts`:
|
|
327
|
+
|
|
328
|
+
```tsx
|
|
329
|
+
import type { LayoutDemo, LayoutProps } from '@honeydeck/honeydeck/types'
|
|
330
|
+
|
|
331
|
+
type HeroFrontmatter = {
|
|
332
|
+
/** Short label shown above the title. */
|
|
333
|
+
eyebrow?: string
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export default function HeroLayout({ title, children, frontmatter }: LayoutProps<HeroFrontmatter>) {
|
|
337
|
+
return (/* ... */)
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export const demo: LayoutDemo<HeroFrontmatter> = {
|
|
341
|
+
mdx: `---
|
|
342
|
+
layout: Hero
|
|
343
|
+
eyebrow: Launch
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
# Hero moment
|
|
347
|
+
|
|
348
|
+
This snippet and preview come from the same demo.`,
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
`mdx` is the single source for both the live preview and the copyable usage snippet in the layouts reference page. If no demo is exported, the layout still appears with a “No demo MDX provided” hint.
|
|
353
|
+
|
|
354
|
+
## Slot components
|
|
355
|
+
|
|
356
|
+
Layouts that need content slots can export slot components alongside the layout:
|
|
357
|
+
|
|
358
|
+
```tsx
|
|
359
|
+
// layouts/TwoCol.tsx
|
|
360
|
+
import type { ReactNode } from 'react'
|
|
361
|
+
import type { LayoutProps } from '@honeydeck/honeydeck/types'
|
|
362
|
+
|
|
363
|
+
export function Left({ children }: { children: ReactNode }) {
|
|
364
|
+
return <div data-honeydeck-slot="left" className="col-start-1 overflow-hidden">{children}</div>
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export function Right({ children }: { children: ReactNode }) {
|
|
368
|
+
return <div data-honeydeck-slot="right" className="col-start-2 overflow-hidden">{children}</div>
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export default function TwoColLayout({ title, children }: LayoutProps) {
|
|
372
|
+
return (
|
|
373
|
+
<div className="grid h-full grid-cols-2 gap-12">
|
|
374
|
+
{children}
|
|
375
|
+
</div>
|
|
376
|
+
)
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Users import slots from the layout module:
|
|
381
|
+
|
|
382
|
+
```mdx
|
|
383
|
+
import { Left, Right } from './layouts/TwoCol'
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## Image helpers
|
|
387
|
+
|
|
388
|
+
Built-in placeholder images are available as URL exports for custom image layouts:
|
|
389
|
+
|
|
390
|
+
```ts
|
|
391
|
+
import {
|
|
392
|
+
imagePlaceholder,
|
|
393
|
+
imagePlaceholderDark,
|
|
394
|
+
verticalImagePlaceholder,
|
|
395
|
+
verticalImagePlaceholderDark,
|
|
396
|
+
} from '@honeydeck/honeydeck/layouts/placeholders'
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Use `ColorModeImage` when a custom layout accepts separate light and dark image URLs:
|
|
400
|
+
|
|
401
|
+
```tsx
|
|
402
|
+
import { ColorModeImage } from '@honeydeck/honeydeck'
|
|
403
|
+
|
|
404
|
+
<ColorModeImage src={image} darkSrc={darkImage} alt={alt} />
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Runtime reference
|
|
408
|
+
|
|
409
|
+
During development, open the built-in reference pages:
|
|
410
|
+
|
|
411
|
+
- `/#/theme` shows all `--honeydeck-*` CSS tokens with computed values and descriptions.
|
|
412
|
+
- `/#/layouts` shows layouts from the active layout map, live visual previews, copyable snippets, and extracted frontmatter prop docs.
|
|
413
|
+
- `/#/components` shows public built-in components exported from `@honeydeck/honeydeck/components`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Diving deeper
|
|
2
2
|
|
|
3
3
|
Use this guide after the quick start when you want to understand the main Honeydeck workflows without jumping straight into every reference page.
|
|
4
4
|
|
|
@@ -285,24 +285,26 @@ All tokens are mapped to Tailwind utilities:
|
|
|
285
285
|
|
|
286
286
|
Available color utilities: `primary`, `primary-foreground`, `accent`, `accent-foreground`, `background`, `foreground`, `surface`, `surface-foreground`, and `border`.
|
|
287
287
|
|
|
288
|
-
See [
|
|
288
|
+
See [Customization](customization.md) for theme and layout customization.
|
|
289
289
|
|
|
290
|
-
##
|
|
290
|
+
## Customization
|
|
291
291
|
|
|
292
|
-
|
|
292
|
+
Customize Honeydeck with explicit CSS imports, React component imports, and layout maps.
|
|
293
293
|
|
|
294
294
|
```mdx
|
|
295
295
|
---
|
|
296
|
-
layouts: "
|
|
296
|
+
layouts: "./layouts"
|
|
297
297
|
---
|
|
298
298
|
|
|
299
|
-
import '
|
|
300
|
-
import { Callout } from '
|
|
299
|
+
import './styles.css'
|
|
300
|
+
import { Callout } from './components/Callout'
|
|
301
301
|
|
|
302
|
-
# Slide with
|
|
302
|
+
# Slide with custom pieces
|
|
303
|
+
|
|
304
|
+
<Callout>Important!</Callout>
|
|
303
305
|
```
|
|
304
306
|
|
|
305
|
-
Zero config still works: built-in defaults apply without imports. See [
|
|
307
|
+
Zero config still works: built-in defaults apply without imports. See [Customization](customization.md).
|
|
306
308
|
|
|
307
309
|
## Runtime reference
|
|
308
310
|
|
|
@@ -360,18 +362,11 @@ type LayoutProps<F = Record<string, unknown>> = {
|
|
|
360
362
|
|
|
361
363
|
## Agent skills
|
|
362
364
|
|
|
363
|
-
Honeydeck ships optional agent skills
|
|
364
|
-
|
|
365
|
-
- `honeydeck` for Honeydeck-specific MDX and CLI guidance
|
|
366
|
-
- `presentation-writing` for help writing strong slide narratives
|
|
367
|
-
- `slidev-migration` for moving decks from Slidev to Honeydeck
|
|
368
|
-
|
|
369
|
-
`honeydeck init` can open the same interactive skills installer as `honeydeck skill`.
|
|
365
|
+
Honeydeck ships optional agent skills for Honeydeck authoring, presentation writing, and Slidev migration. `honeydeck init` can open the same interactive skills installer as `honeydeck skill`.
|
|
370
366
|
|
|
371
367
|
```bash
|
|
372
368
|
honeydeck skill
|
|
373
|
-
npx skills add <honeydeck-repo-url> --copy
|
|
374
|
-
npx skills add <honeydeck-repo-url> --copy --skill slidev-migration
|
|
375
369
|
```
|
|
376
370
|
|
|
371
|
+
See [Skills](skills.md) for installation options and bundled skill details.
|
|
377
372
|
Coming from Slidev? See the [Slidev migration guide](slidev-migration.md).
|
package/docs/getting-started.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Getting started
|
|
2
2
|
|
|
3
|
-
Honeydeck helps you create polished, interactive presentations
|
|
3
|
+
Honeydeck helps you create polished, interactive presentations using MDX. Write slides in Markdown, use different Layout, add React components when you need them, present using presenter mode, and export to PDF for easy sharing.
|
|
4
4
|
|
|
5
5
|
## Quick start
|
|
6
6
|
|
|
@@ -21,11 +21,11 @@ npm run build
|
|
|
21
21
|
npm run pdf
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
`npx @honeydeck/honeydeck` to see cli help.
|
|
25
25
|
|
|
26
26
|
## Your first deck
|
|
27
27
|
|
|
28
|
-
Decks are MDX files. The first frontmatter block configures the deck and opening slide. Later `---` separators start new slides.
|
|
28
|
+
Decks are MDX files. The first frontmatter block [configures the deck](configuration.md) and opening slide. Later `---` separators start new slides.
|
|
29
29
|
|
|
30
30
|
```mdx
|
|
31
31
|
---
|
|
@@ -62,7 +62,7 @@ Add React when it helps.
|
|
|
62
62
|
</Right>
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Use `layout:` to choose a slide layout. Built-in layouts include `Blank`, `Default`, `Cover`, `Section`, `TwoCol`, `Image`, `ImageLeft`, and `ImageRight`.
|
|
65
|
+
Use `layout:` to choose a slide layout. Built-in layouts include `Blank`, `Default`, `Cover`, `Section`, `TwoCol`, `Image`, `ImageLeft`, and `ImageRight`. See them in the [showacase/#/layouts](https://showcase.honeydeck.dev/#/layouts).
|
|
66
66
|
|
|
67
67
|
## What Honeydeck gives you
|
|
68
68
|
|
|
@@ -76,6 +76,13 @@ Use `layout:` to choose a slide layout. Built-in layouts include `Blank`, `Defau
|
|
|
76
76
|
- PDF export through headless Chromium
|
|
77
77
|
- Optional Honeydeck agent skills for writing and migration help
|
|
78
78
|
|
|
79
|
+
## Navigating your deck
|
|
80
|
+
|
|
81
|
+
- Next or previous step using `→` `d` / `←` `a`
|
|
82
|
+
- Next or previous slide with `↓` `s` / `↑` `w`
|
|
83
|
+
- Overview of all slides `o`
|
|
84
|
+
- Presenter mode `p`
|
|
85
|
+
|
|
79
86
|
## Common commands
|
|
80
87
|
|
|
81
88
|
```bash
|
|
@@ -91,18 +98,18 @@ honeydeck skill # install optional Honeydeck agent skills
|
|
|
91
98
|
|
|
92
99
|
## Where to go next
|
|
93
100
|
|
|
94
|
-
- [
|
|
101
|
+
- [Deeper dive](deeper-dive.md) - CLI options, authoring patterns, imports, themes, architecture, and agent skills in one follow-up guide
|
|
95
102
|
- [Slides](slides.md) - separators, multiple files, layouts, and assets
|
|
96
103
|
- [Configuration](configuration.md) - deck-level and slide-level frontmatter
|
|
97
104
|
- [Steps and reveals](steps-and-reveals.md) - timeline, reveal groups, code steps, and PDF behavior
|
|
98
105
|
- [Components](components.md) - core Honeydeck components such as `BrowserFrame` and `Keyboard`
|
|
99
|
-
- [
|
|
100
|
-
- [Kit authoring](kit-authoring.md) - layout maps, layout props, demos, and design tokens for kit authors
|
|
106
|
+
- [Customization](customization.md) - themes, layout sets, Tailwind tokens, custom layouts, and layout demos
|
|
101
107
|
- [Navigation](navigation.md) - keyboard, touch, overview mode, and URL state
|
|
102
108
|
- [Mobile and touch](mobile.md) - mobile controls, touch gestures, and pinch zoom
|
|
103
109
|
- [Presenter mode](presenter-mode.md) - notes, presenter window, sync, and mobile behavior
|
|
104
110
|
- [PDF export](pdf-export.md) - options, color modes, and step handling
|
|
105
111
|
- [Local development](local-development.md) - running Honeydeck from this repository
|
|
112
|
+
- [Skills](skills.md) - optional agent skills for authoring, writing, and migration help
|
|
106
113
|
- [Slidev migration](slidev-migration.md) - moving from Slidev with the bundled agent skill
|
|
107
114
|
|
|
108
115
|
## Learn inside a running deck
|
|
@@ -113,4 +120,6 @@ During development, open the runtime reference pages to see:
|
|
|
113
120
|
- layout previews with copyable usage snippets
|
|
114
121
|
- built-in component docs
|
|
115
122
|
|
|
123
|
+
See those in our [showcase](https://showcase.honeydeck.dev/#/layouts)
|
|
124
|
+
|
|
116
125
|
Honeydeck is built with MDX, React, Vite, and Tailwind v4.
|
package/docs/skills.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Skills
|
|
2
|
+
|
|
3
|
+
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.
|
|
4
|
+
|
|
5
|
+
## Install skills
|
|
6
|
+
|
|
7
|
+
New projects can open the skills installer during init:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @honeydeck/honeydeck init --name my-talk --install-skill
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Existing projects can run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
honeydeck skill
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Both commands open the same `skills` CLI flow, where you choose which Honeydeck skills to install, whether to install them for the project or globally, and which agents should receive them.
|
|
20
|
+
|
|
21
|
+
You can also install from the Honeydeck repository:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx skills add <honeydeck-repo-url> --copy
|
|
25
|
+
npx skills add <honeydeck-repo-url> --copy --skill honeydeck
|
|
26
|
+
npx skills add <honeydeck-repo-url> --copy --skill presentation-writing
|
|
27
|
+
npx skills add <honeydeck-repo-url> --copy --skill slidev-migration
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Bundled skills
|
|
31
|
+
|
|
32
|
+
| Skill | Use it for |
|
|
33
|
+
| --- | --- |
|
|
34
|
+
| `honeydeck` | Honeydeck-specific guidance for MDX decks, layouts, CSS imports, presenter notes, reveals, code steps, PDF export, and package docs. |
|
|
35
|
+
| `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. |
|
|
37
|
+
|
|
38
|
+
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
|
+
|
|
40
|
+
## How agents use them
|
|
41
|
+
|
|
42
|
+
Skills do not change Honeydeck runtime behavior. They give your agent a focused local instruction file before it edits your deck.
|
|
43
|
+
|
|
44
|
+
For example, an agent with the `honeydeck` skill should prefer:
|
|
45
|
+
|
|
46
|
+
- `deck.mdx` as the entry file
|
|
47
|
+
- exact `---` slide separators
|
|
48
|
+
- slide frontmatter for layouts
|
|
49
|
+
- explicit imports from `@honeydeck/honeydeck`
|
|
50
|
+
- `<Notes>` for speaker notes
|
|
51
|
+
- `<Reveal>`, `<RevealGroup>`, and code metadata for steps
|
|
52
|
+
- `honeydeck pdf` for PDF export
|
|
53
|
+
|
|
54
|
+
The skills also point agents back to the packaged docs and specs, so generated deck changes can stay aligned with the installed Honeydeck version.
|
|
55
|
+
|
|
56
|
+
## Updating skills
|
|
57
|
+
|
|
58
|
+
Skills are copied into the target scope when you install them. Re-run the installer after upgrading Honeydeck if you want the latest bundled instructions:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm update @honeydeck/honeydeck
|
|
62
|
+
honeydeck skill
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Coming from Slidev? See the [Slidev migration guide](slidev-migration.md) for the migration-specific workflow.
|