@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.
@@ -16,7 +16,7 @@ Before changing files, read the available project/package docs:
16
16
  - `Readme.md`, `docs/getting-started.md`, root `SPEC.md`, linked colocated `SPEC.md` files, and `docs/slides.md` for Honeydeck deck structure
17
17
  - `docs/configuration.md` for Honeydeck frontmatter
18
18
  - `docs/steps-and-reveals.md` for Reveal/RevealGroup/code steps
19
- - `docs/kits.md` and `docs/kit-authoring.md` for layouts/themes/components
19
+ - `docs/customization.md` for layouts, themes, components, layout maps, and design tokens
20
20
  - Existing Slidev files: `slides.md`, `pages/**/*.md`, `components/**/*.vue`, `layouts/**/*.vue`, `styles/**`, `public/**`, `package.json`, `vite.config.*`, and local theme/addon packages
21
21
 
22
22
  If Honeydeck docs are not nearby, package docs may be in `node_modules/@honeydeck/honeydeck`, or the user can use the public docs site. A migrated deck's runtime reference pages cover active theme tokens, layouts, and built-in components.
@@ -51,7 +51,7 @@ Create a working Honeydeck presentation that preserves the talk's structure, con
51
51
  | `public/**` | `public/**` copied unchanged; root-relative `/assets/...` paths usually keep working |
52
52
  | `components/*.vue` | `components/*.tsx` React components |
53
53
  | `layouts/*.vue` | React layouts plus a layout map selected with deck frontmatter `layouts: "./layouts"` |
54
- | Slidev theme package | Honeydeck kit/theme/layout map, or local React layouts + CSS |
54
+ | Slidev theme package | Honeydeck theme CSS, layout map, or local React layouts + CSS |
55
55
  | `styles/style.css` or `styles/index.*` | `styles.css` imported from `deck.mdx` |
56
56
  | `slidev`, `slidev build`, `slidev export` scripts | `honeydeck dev`, `honeydeck build`, `honeydeck pdf` scripts |
57
57
 
package/src/cli/index.ts CHANGED
@@ -116,7 +116,7 @@ ${formatTopLevelBanner()}
116
116
  honeydeck dev --open
117
117
  honeydeck pdf --steps all --mode dark -o slides.pdf
118
118
 
119
- 🎞 Happy presenting!
119
+ 🐝 Happy presenting!
120
120
  `);
121
121
  }
122
122
 
@@ -1,170 +1,99 @@
1
- # Honeydeck Layouts and Kits Specification
1
+ # Honeydeck Layouts and Customization Specification
2
2
 
3
- > Observable behavior for kits, layout maps, built-in layouts, layout props, and layout demos.
3
+ > Observable behavior for theme CSS, layout maps, built-in layouts, layout props, and layout demos.
4
4
 
5
- ## Kits β€” Theme, Layouts, Components
5
+ ## Customization β€” Theme CSS, Layout Maps, Components
6
6
 
7
- A **kit** is an npm package (or local folder) that bundles three concerns. Honeydeck does not require a special registry mechanism; themes are CSS imports, layouts are default-exported layout maps, and components are normal React/MDX imports:
7
+ Honeydeck customization is explicit composition. Themes are CSS imports, layouts come from a default-exported layout map, and components are normal React/MDX imports:
8
8
 
9
9
  | Concern | What it is | How it's used |
10
10
  |---------|-----------|---------------|
11
- | Theme | CSS file (tokens, colors, typography) | explicit CSS import from MDX or another CSS file |
12
- | Layouts | Layout component map | `layouts:` in frontmatter |
13
- | Components | Reusable React components | `import` in MDX |
11
+ | Theme | CSS file with tokens, colors, and typography | explicit CSS import from MDX or another CSS file |
12
+ | Layouts | layout component map | `layouts:` in frontmatter |
13
+ | Components | reusable React components | explicit `import` in MDX |
14
14
 
15
- ### Kit Package Structure
15
+ These references may point to local project files or normal installed packages. Honeydeck does not provide special publishing or registry behavior.
16
16
 
17
- ```txt
18
- @company/honeydeck-kit-brand/
19
- package.json
20
- theme.css ← CSS tokens/variables
21
- layouts/
22
- index.ts ← exports LayoutMap
23
- Blank.tsx
24
- Default.tsx
25
- Cover.tsx
26
- Section.tsx
27
- TwoCol.tsx
28
- Image.tsx
29
- ImageLeft.tsx
30
- ImageRight.tsx
31
- components/
32
- Callout.tsx
33
- Badge.tsx
34
- ```
17
+ ### Zero Config
35
18
 
36
- ### Using a Kit
19
+ A plain `deck.mdx` file with no frontmatter still works with built-in layouts:
37
20
 
38
21
  ```mdx
39
- ---
40
- title: My Talk
41
- layouts: "@company/honeydeck-kit-brand/layouts"
42
- ---
43
-
44
- import '@company/honeydeck-kit-brand/theme.css'
45
- import './my-overrides.css'
46
-
47
- import { Callout } from '@company/honeydeck-kit-brand/components'
48
-
49
- # First slide
22
+ # Hello world
50
23
 
51
- <Callout>Important!</Callout>
24
+ This renders with the built-in default layout.
52
25
  ```
53
26
 
54
- ### Mix and Match
27
+ Styling is provided only by explicit CSS imports. Honeydeck does not auto-inject Tailwind, `@honeydeck/honeydeck/theme.css`, or custom theme CSS. The starter project imports `./styles.css` from `deck.mdx`; `styles.css` imports Tailwind and `@honeydeck/honeydeck/theme.css`. Without that import, slides still render with built-in layouts, but mostly with browser/default styling. User imports override via cascade.
55
28
 
56
- Theme CSS from one kit, layouts from another, components from a third:
29
+ ### Theme Layering
57
30
 
58
- ```mdx
59
- ---
60
- layouts: "@company/honeydeck-kit-brand/layouts"
61
- ---
62
-
63
- import '@other/honeydeck-kit-minimal/theme.css'
64
- import { Badge } from '@third/honeydeck-kit-fancy/components'
65
- ```
66
-
67
- ### Local Kits
68
-
69
- Create a kit in your project folder:
31
+ Honeydeck ships optional theme layers that are imported after the base theme. Theme layers are token overrides and are not standalone replacements for the base theme:
70
32
 
71
- ```txt
72
- awesome-talk/
73
- theme.css
74
- layouts/
75
- index.ts
76
- MyCustom.tsx
33
+ ```css
34
+ @import "tailwindcss";
35
+ @import "@honeydeck/honeydeck/theme.css";
36
+ @import "@honeydeck/honeydeck/themes/clean.css";
77
37
  ```
78
38
 
79
- Reference locally (relative to the deck entry file):
39
+ Honeydeck includes:
80
40
 
81
- ```yaml
82
- ---
83
- layouts: "./layouts"
84
- ---
85
- ```
41
+ | Theme import | Purpose |
42
+ |--------------|---------|
43
+ | `@honeydeck/honeydeck/theme.css` | Preferred base theme import; clean black/white/grey defaults |
44
+ | `@honeydeck/honeydeck/themes/base.css` | Package export alias for the base theme |
45
+ | `@honeydeck/honeydeck/themes/clean.css` | Optional clean visual style layer |
46
+ | `@honeydeck/honeydeck/themes/bee.css` | Bee theme layer for the original playful palette |
86
47
 
87
- ```mdx
88
- import './theme.css'
89
- ```
48
+ Use `@honeydeck/honeydeck/layouts` for clean default layouts. Use `@honeydeck/honeydeck/layouts/bee` together with `@honeydeck/honeydeck/themes/bee.css` for the Bee visual style.
90
49
 
91
- ### Kit CSS Inheritance
50
+ ### CSS Overrides
92
51
 
93
- Use standard CSS `@import` for extending another kit's theme:
52
+ Use standard CSS cascade and `@import` to layer overrides:
94
53
 
95
54
  ```css
96
- /* theme.css β€” extends company kit */
97
- @import '@company/honeydeck-kit-brand/theme.css';
55
+ @import "tailwindcss";
56
+ @import "@honeydeck/honeydeck/theme.css";
98
57
 
99
58
  :root {
100
59
  --honeydeck-primary: oklch(55% 0.25 145);
101
60
  }
102
61
  ```
103
62
 
104
- ### Layout Inheritance
63
+ ### Layout Maps
105
64
 
106
- Use JS spread to compose layouts from multiple sources:
65
+ Create a layout map in the project and reference it relative to the deck entry file:
66
+
67
+ ```yaml
68
+ ---
69
+ layouts: "./layouts"
70
+ ---
71
+ ```
72
+
73
+ Layout maps may compose entries with JavaScript spread:
107
74
 
108
75
  ```ts
109
76
  // layouts/index.ts
110
- import companyLayouts from '@company/honeydeck-kit-brand/layouts'
111
- import fancyLayouts from '@fancy/honeydeck-kit/layouts'
77
+ import defaultLayouts from '@honeydeck/honeydeck/layouts'
112
78
  import { MyCustomCover } from './Cover'
113
79
 
114
80
  export default {
115
- ...companyLayouts,
116
- Section: fancyLayouts.Section,
81
+ ...defaultLayouts,
117
82
  Cover: MyCustomCover,
118
83
  } satisfies LayoutMap
119
84
  ```
120
85
 
121
- ### Zero Config
122
-
123
- A plain `deck.mdx` file with no frontmatter still works with built-in layouts:
124
-
125
- ```mdx
126
- # Hello world
127
-
128
- This renders with the built-in default layout.
129
- ```
130
-
131
- Styling is provided only by explicit CSS imports. Honeydeck does not auto-inject Tailwind, `@honeydeck/honeydeck/theme.css`, or kit theme CSS. The starter project imports `./styles.css` from `deck.mdx`; `styles.css` imports Tailwind and `@honeydeck/honeydeck/theme.css`. Without that import, slides still render with built-in layouts, but mostly with browser/default styling. User imports override via cascade.
132
-
133
- ### Bundled Theme Layers
134
-
135
- Honeydeck ships optional theme layers that are imported after the base theme. Theme layers are token overrides and are not standalone replacements for the base theme:
136
-
137
- ```css
138
- @import "tailwindcss";
139
- @import "@honeydeck/honeydeck/theme.css";
140
- @import "@honeydeck/honeydeck/themes/clean.css";
141
- ```
142
-
143
- Honeydeck includes:
144
-
145
- | Theme import | Purpose |
146
- |--------------|---------|
147
- | `@honeydeck/honeydeck/theme.css` | Preferred base theme import; clean black/white/grey defaults |
148
- | `@honeydeck/honeydeck/themes/base.css` | Package export alias for the base theme |
149
- | `@honeydeck/honeydeck/themes/clean.css` | Optional clean visual style layer |
150
- | `@honeydeck/honeydeck/themes/bee.css` | Bee theme layer for the original playful palette |
151
-
152
- Use `@honeydeck/honeydeck/layouts` for clean default layouts. Use `@honeydeck/honeydeck/layouts/bee` together with `@honeydeck/honeydeck/themes/bee.css` for the Bee visual style.
153
-
154
86
  ### Progressive Customization
155
87
 
156
88
  ```txt
157
89
  Level 0: plain `deck.mdx` β†’ built-in layouts, browser/default styling
158
- Level 1: import CSS β†’ Tailwind, base styling, and token overrides
159
- Level 2: set layouts: β†’ custom layout map
160
- Level 3: local kit folder β†’ full control
161
- Level 4: publish npm kit β†’ share across projects
90
+ Level 1: import CSS β†’ Tailwind, base styling, and token overrides
91
+ Level 2: import components β†’ reusable React pieces in MDX
92
+ Level 3: set layouts: β†’ custom layout map
162
93
  ```
163
94
 
164
95
  ---
165
96
 
166
- ---
167
-
168
97
  ## Layouts
169
98
 
170
99
  ### Default Layouts
@@ -100,7 +100,7 @@ Toggled via `o` or the overview button. Overview is also directly addressable as
100
100
 
101
101
  Built-in reference pages start at `/#/theme`. Included in both dev and production builds.
102
102
 
103
- User-facing product copy should call this area "reference pages". Reserve "kit" for the reusable theme/layout/component package concept described in [Kits β€” Theme, Layouts, Components](../../layouts/SPEC.md#kits--theme-layouts-components).
103
+ User-facing product copy should call this area "reference pages". Theme, layout, and component customization is described in [Customization β€” Theme CSS, Layout Maps, Components](../../layouts/SPEC.md#customization--theme-css-layout-maps-components).
104
104
 
105
105
  ### Routes
106
106
 
@@ -1,207 +0,0 @@
1
- # Kit Authoring
2
-
3
- Guide for building reusable Honeydeck kits (themes, layouts, components).
4
-
5
- ## Type Exports
6
-
7
- All types for kit authors come from the `'honeydeck'` package:
8
-
9
- ```ts
10
- import type { LayoutProps, LayoutMap, LayoutDemo } from '@honeydeck/honeydeck'
11
- ```
12
-
13
- | Type | Purpose |
14
- |------|---------|
15
- | `LayoutProps<F>` | Props passed to layout components (generic for frontmatter) |
16
- | `LayoutMap` | `Record<string, ComponentType<LayoutProps<any>>>` |
17
- | `LayoutDemo<F>` | Demo data for the docs reference page |
18
-
19
- ## Layout Map
20
-
21
- The `layouts:` frontmatter resolves to a module that default-exports a `LayoutMap`:
22
-
23
- ```ts
24
- import type { LayoutMap } from '@honeydeck/honeydeck'
25
- import { BlankLayout } from './Blank'
26
- import { DefaultLayout } from './Default'
27
- import { CoverLayout } from './Cover'
28
- import { SectionLayout } from './Section'
29
- import { TwoColLayout } from './TwoCol'
30
- import { ImageLayout } from './Image'
31
- import { ImageLeftLayout } from './ImageLeft'
32
- import { ImageRightLayout } from './ImageRight'
33
-
34
- export default {
35
- Blank: BlankLayout,
36
- Default: DefaultLayout,
37
- Cover: CoverLayout,
38
- Section: SectionLayout,
39
- TwoCol: TwoColLayout,
40
- Image: ImageLayout,
41
- ImageLeft: ImageLeftLayout,
42
- ImageRight: ImageRightLayout,
43
- } satisfies LayoutMap
44
- ```
45
-
46
- ## Layout Props
47
-
48
- `LayoutProps` is generic so layouts can type their accepted frontmatter:
49
-
50
- ```ts
51
- type LayoutProps<F extends Record<string, unknown> = Record<string, unknown>> = {
52
- title: ReactNode | null // extracted first h1 content
53
- children: ReactNode // remaining content (h1 removed)
54
- rawChildren: ReactNode // full unmodified content (h1 included)
55
- frontmatter: F
56
- }
57
- ```
58
-
59
- Example typed layout:
60
-
61
- ```tsx
62
- import type { LayoutProps } from '@honeydeck/honeydeck'
63
-
64
- type CoverFrontmatter = {
65
- author?: string
66
- date?: string
67
- }
68
-
69
- export function CoverLayout({ title, children, frontmatter }: LayoutProps<CoverFrontmatter>) {
70
- const { author, date } = frontmatter
71
- return (/* ... */)
72
- }
73
- ```
74
-
75
- This enables a future language server to extract frontmatter types for autocomplete.
76
-
77
- ## Image Helpers
78
-
79
- Custom layouts can import `ColorModeImage` from `honeydeck` to render optional light/dark image variants with Honeydeck's Tailwind color-mode utilities:
80
-
81
- ```tsx
82
- import { ColorModeImage } from '@honeydeck/honeydeck'
83
-
84
- <ColorModeImage src={image} darkSrc={darkImage} alt={alt} />
85
- ```
86
-
87
- ## Layout Demos
88
-
89
- Layouts optionally export a `demo` constant for the docs reference page:
90
-
91
- ```tsx
92
- import type { LayoutProps, LayoutDemo } from '@honeydeck/honeydeck'
93
-
94
- type CoverFrontmatter = {
95
- /** Speaker or organization shown below the title. */
96
- author?: string
97
- }
98
-
99
- export function CoverLayout({ title, children, frontmatter }: LayoutProps<CoverFrontmatter>) {
100
- const { author } = frontmatter
101
- return (/* ... */)
102
- }
103
-
104
- export const demo: LayoutDemo<CoverFrontmatter> = {
105
- mdx: `---
106
- layout: Cover
107
- author: Hendrik
108
- ---
109
-
110
- # Welcome to My Talk
111
-
112
- Building the future of presentations.`,
113
- }
114
- ```
115
-
116
- `mdx` is the single source for both the live visual preview and the copyable usage snippet. Honeydeck compiles it with the slide MDX pipeline, extracts frontmatter/title/steps, and renders it through the active layout map.
117
-
118
- If no static `demo.mdx` is exported, the layout still appears in `/#/layouts` with a β€œNo demo MDX provided” hint.
119
-
120
- ## Slot Components
121
-
122
- Layouts that need content slots (like `TwoCol`) export slot components alongside the layout:
123
-
124
- ```tsx
125
- // layouts/TwoCol.tsx
126
- import type { LayoutProps } from '@honeydeck/honeydeck'
127
- import type { ReactNode } from 'react'
128
-
129
- export function Left({ children }: { children: ReactNode }) { /* ... */ }
130
- export function Right({ children }: { children: ReactNode }) { /* ... */ }
131
-
132
- export default function TwoColLayout({ title, children }: LayoutProps) {
133
- return (/* ... */)
134
- }
135
- ```
136
-
137
- Users import slots from the layout path:
138
-
139
- ```mdx
140
- import { Left, Right } from '@honeydeck/honeydeck/layouts/TwoCol'
141
- import { Left, Right } from '@company/honeydeck-kit-brand/layouts/TwoCol'
142
- ```
143
-
144
- ## Runtime Reference
145
-
146
- Honeydeck includes built-in runtime reference pages in dev and production builds:
147
-
148
- - **Theme tab (`/#/theme`):** All `--honeydeck-*` CSS tokens with computed values and descriptions.
149
- - **Layouts tab (`/#/layouts`):** All layouts currently available in the active deck layout map, live visual previews rendered from `demo.mdx`, copyable usage snippets from the same MDX source, and prop docs extracted from `LayoutProps<Frontmatter>` field comments.
150
- - **Components tab (`/#/components`):** Public built-in components exported from `@honeydeck/honeydeck/components`, generated documentation from exported component JSDoc comments interpreted as Markdown/MDX, side navigation, and params tables extracted from exported props types.
151
-
152
- Package Markdown guides are published through the Honeydeck docs site rather than rendered as in-deck pages.
153
-
154
- Token descriptions are extracted from CSS comments preceding `--honeydeck-*` declarations at build time.
155
-
156
- ## Dependency Policy
157
-
158
- - `honeydeck` and kits declare `react` and `react-dom` as `peerDependencies`.
159
- - Kits may declare compatible `honeydeck` versions via `peerDependencies`.
160
- - Kits using Tailwind declare compatible Tailwind versions as peer dependencies.
161
- - Generated slide projects install concrete dependency versions.
162
-
163
- ## Design Tokens
164
-
165
- Themes provide CSS custom properties. Colors derive from a primary using `oklch` relative color syntax, with separate values for light and dark modes:
166
-
167
- ```css
168
- [data-honeydeck-color-mode="light"] {
169
- --honeydeck-primary: oklch(50% 0.2 250);
170
- --honeydeck-background: oklch(from var(--honeydeck-primary) 98% 0.01 h);
171
- --honeydeck-foreground: oklch(from var(--honeydeck-primary) 15% 0.02 h);
172
- --honeydeck-surface: oklch(from var(--honeydeck-primary) 94% 0.02 h);
173
- /* ... */
174
- }
175
- ```
176
-
177
- Full token list:
178
-
179
- | Token | Purpose |
180
- |-------|---------|
181
- | `--honeydeck-primary` | Brand color for this mode |
182
- | `--honeydeck-primary-foreground` | Text on primary backgrounds |
183
- | `--honeydeck-background` | Main slide background |
184
- | `--honeydeck-foreground` | Main text color |
185
- | `--honeydeck-surface` | Cards, code blocks, callouts |
186
- | `--honeydeck-surface-foreground` | Text on surfaces |
187
- | `--honeydeck-border` | Border/divider color |
188
- | `--honeydeck-accent` | Accent, computed as complementary by default |
189
- | `--honeydeck-accent-foreground` | Text on accent backgrounds |
190
- | `--honeydeck-link-color` | Link color (default: inherit) |
191
- | `--honeydeck-border-radius` | Default border radius |
192
- | `--honeydeck-font-heading` | Heading font family |
193
- | `--honeydeck-font-body` | Body font family |
194
- | `--honeydeck-font-mono` | Monospace font family |
195
- | `--honeydeck-font-base` | Base font size (default: 16px) |
196
- | `--honeydeck-font-scale` | Heading scale factor (default: 1.25) |
197
- | `--honeydeck-code-line-dim-opacity` | Dim opacity for non-highlighted code lines |
198
-
199
- ## Tailwind Mapping
200
-
201
- All tokens are mapped to Tailwind utilities:
202
-
203
- ```mdx
204
- <div className="bg-surface text-surface-foreground border border-border rounded-honeydeck">
205
- Card content
206
- </div>
207
- ```