@honeydeck/honeydeck 0.1.2 → 0.2.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 +2 -3
- package/SPEC.md +3 -3
- package/docs/customization.md +413 -0
- package/docs/{next-steps.md → deeper-dive.md} +11 -9
- package/docs/getting-started.md +15 -7
- package/docs/slidev-migration.md +1 -1
- package/package.json +1 -2
- package/skills/SPEC.md +2 -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/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,13 +19,12 @@ 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
|
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
|
|
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,13 +98,12 @@ 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
|
|
@@ -113,4 +119,6 @@ During development, open the runtime reference pages to see:
|
|
|
113
119
|
- layout previews with copyable usage snippets
|
|
114
120
|
- built-in component docs
|
|
115
121
|
|
|
122
|
+
See those in our [showcase](https://showcase.honeydeck.dev/#/layouts)
|
|
123
|
+
|
|
116
124
|
Honeydeck is built with MDX, React, Vite, and Tailwind v4.
|
package/docs/slidev-migration.md
CHANGED
|
@@ -34,7 +34,7 @@ The skill guides an agent through the common Slidev-to-Honeydeck mapping:
|
|
|
34
34
|
| `pages/*.md` with `src:` includes | imported `.mdx` slide groups |
|
|
35
35
|
| `public/**` | `public/**` |
|
|
36
36
|
| `components/*.vue` | React `components/*.tsx` |
|
|
37
|
-
| `layouts/*.vue` or Slidev themes | Honeydeck layouts, layout maps,
|
|
37
|
+
| `layouts/*.vue` or Slidev themes | Honeydeck layouts, layout maps, React components, and CSS |
|
|
38
38
|
| `<v-click>` / `<v-clicks>` | `<Reveal>` / `<RevealGroup>` |
|
|
39
39
|
| trailing note comments | `<Notes>` |
|
|
40
40
|
| `slidev`, `slidev build`, `slidev export` | `honeydeck dev`, `honeydeck build`, `honeydeck pdf` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@honeydeck/honeydeck",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MDX and React-based presentation framework for AI-friendly slide decks.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -89,7 +89,6 @@
|
|
|
89
89
|
"#vite-plugin/*": "./src/vite-plugin/*"
|
|
90
90
|
},
|
|
91
91
|
"scripts": {
|
|
92
|
-
"build": "npm run typecheck",
|
|
93
92
|
"dev": "node --import tsx ./src/cli/index.ts dev --deck src/cli/templates/starter/deck.mdx",
|
|
94
93
|
"dev:init": "node --import tsx ./src/cli/index.ts dev --deck src/cli/templates/starter/deck.mdx",
|
|
95
94
|
"format": "biome check --write",
|
package/skills/SPEC.md
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
Honeydeck ships installable agent skills:
|
|
8
8
|
|
|
9
|
-
- `skills/honeydeck/SKILL.md` (`honeydeck`) helps AI agents use Honeydeck correctly: MDX entrypoint, deck frontmatter, exact `---` slide separators, slide frontmatter, built-in layouts, explicit theme/CSS imports, presenter notes, steps/reveals, code blocks, PDF export, custom React components,
|
|
9
|
+
- `skills/honeydeck/SKILL.md` (`honeydeck`) helps AI agents use Honeydeck correctly: MDX entrypoint, deck frontmatter, exact `---` slide separators, slide frontmatter, built-in layouts, explicit theme/CSS imports, presenter notes, steps/reveals, code blocks, PDF export, custom React components, customization, canonical package docs, and runtime reference pages.
|
|
10
10
|
- `skills/presentation-writing/SKILL.md` (`presentation-writing`) gives opinionated guidance for writing great slides and delivering good presentations: audience/goal/duration discovery, storyline, one idea per slide, strong headlines, sparse visuals, speaker notes, timing, narrative flow, progressive disclosure, and review heuristics.
|
|
11
11
|
- `skills/slidev-migration/SKILL.md` (`slidev-migration`) helps AI agents migrate presentations from Slidev/sli.dev to Honeydeck: initialize a Honeydeck project when needed, convert `slides.md` to `deck.mdx`, map Slidev frontmatter/layouts/assets/notes/reveals/scripts to Honeydeck equivalents, and flag Vue/theme features that need manual React follow-up.
|
|
12
12
|
|
|
13
13
|
Expected behavior:
|
|
14
14
|
|
|
15
15
|
- All skills are discoverable by the `skills` CLI when users run `npx skills add <honeydeck-repo-url> --copy` or explicit `npx skills add <honeydeck-repo-url> --copy --skill honeydeck` / `--skill presentation-writing` / `--skill slidev-migration`.
|
|
16
|
-
- The `honeydeck` skill instructs agents to use Honeydeck documentation (`Readme.md` for package overview, `docs/getting-started.md` for first-run guidance, package/root `SPEC.md`, linked colocated `SPEC.md` files, `docs/
|
|
16
|
+
- The `honeydeck` skill instructs agents to use Honeydeck documentation (`Readme.md` for package overview, `docs/getting-started.md` for first-run guidance, package/root `SPEC.md`, linked colocated `SPEC.md` files, `docs/deeper-dive.md`, `docs/slides.md`, `docs/steps-and-reveals.md`, `docs/customization.md`, `docs/configuration.md`, and related docs) as the source of truth when available.
|
|
17
17
|
- The `honeydeck` skill documents a local docs discovery order: current project's `node_modules/@honeydeck/honeydeck`, monorepo checkout `packages/honeydeck`, package-root checkout docs, then the public docs URL.
|
|
18
18
|
- The `presentation-writing` skill is framework-agnostic enough to help with presentation quality, while still working well alongside the Honeydeck skill.
|
|
19
19
|
- The `slidev-migration` skill instructs agents to inspect existing Slidev projects, preserve source files until the user approves cleanup, initialize or merge Honeydeck starter files, migrate common Slidev syntax to Honeydeck MDX/React, and document unsupported or approximated features.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: honeydeck
|
|
3
|
-
description: Help users create, edit, debug, and export Honeydeck MDX presentations. Use for Honeydeck syntax, deck.mdx structure, layouts, frontmatter, steps/reveals, presenter notes, code blocks, custom React components,
|
|
3
|
+
description: Help users create, edit, debug, and export Honeydeck MDX presentations. Use for Honeydeck syntax, deck.mdx structure, layouts, frontmatter, steps/reveals, presenter notes, code blocks, custom React components, themes, CLI commands, dev preview, build, or PDF export.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Honeydeck
|
|
@@ -22,11 +22,11 @@ Important docs:
|
|
|
22
22
|
|
|
23
23
|
- `Readme.md` for the compact package overview and documentation index
|
|
24
24
|
- `docs/getting-started.md` for quick start and first-run orientation
|
|
25
|
-
- `docs/
|
|
25
|
+
- `docs/deeper-dive.md` for CLI details, feature overview, architecture, exports, and agent skills
|
|
26
26
|
- root/package `SPEC.md` and linked colocated `SPEC.md` files for expected behavior
|
|
27
27
|
- `docs/slides.md` for deck structure, slide separators, and multi-file decks
|
|
28
28
|
- `docs/steps-and-reveals.md` for step-by-step reveals and code steps
|
|
29
|
-
- `docs/
|
|
29
|
+
- `docs/customization.md` for themes, layouts, custom React components, layout maps, demos, and design tokens
|
|
30
30
|
- `docs/configuration.md` for frontmatter options
|
|
31
31
|
- `docs/navigation.md`, `docs/mobile.md`, `docs/presenter-mode.md`, and `docs/pdf-export.md` for presenting/exporting
|
|
32
32
|
|