@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.
@@ -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, or kits |
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.1.2",
3
+ "version": "0.3.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,16 +6,17 @@
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, kits, canonical package docs, and runtime reference pages.
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/next-steps.md`, `docs/slides.md`, `docs/steps-and-reveals.md`, `docs/kits.md`, `docs/configuration.md`, and related docs) as the source of truth when available.
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.
20
20
  - `honeydeck init` should offer to open the interactive skills installer for the generated project and make clear that accepting runs `npx skills add`.
21
21
  - `honeydeck init` and `honeydeck skill` should delegate bundled skill selection, scope selection, and agent selection to the same `npx skills add <honeydeck-package-source> --copy` flow.
22
+ - `docs/skills.md` should document why and how to install the bundled skills, list the `honeydeck`, `presentation-writing`, and `slidev-migration` skills, and link to the Slidev migration guide for migration-specific details.
@@ -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, kits/themes, CLI commands, dev preview, build, or PDF export.
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/next-steps.md` for CLI details, feature overview, architecture, exports, and agent skills
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/kits.md` and `docs/kit-authoring.md` for themes, layouts, and reusable kits
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
 
@@ -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
@@ -121,10 +121,11 @@ Reference page routes intentionally do not encode slide or step. During one brow
121
121
 
122
122
  Shown in normal slide view only (not presenter/reference views).
123
123
 
124
- - Positioned bottom-left
124
+ - Positioned bottom-center on narrow mobile screens and bottom-left from wider breakpoints
125
125
  - **Hidden by default** on desktop — appears on cursor hover near bottom edge
126
126
  - **Always visible** on mobile/tablet portrait
127
127
  - **Hidden by default** on mobile/tablet landscape — appears when the center tap zone is tapped, fades after roughly 3 seconds of idle time, and stays visible while being interacted with
128
+ - On narrow mobile screens, stays within the viewport by wrapping controls into compact groups instead of extending past the screen edge
128
129
  - Contains:
129
130
  - Current slide number
130
131
  - Navigation arrows (step left/right)
@@ -118,105 +118,117 @@ export function NavBar({
118
118
  const canPrev = getPreviousStepRoute(route, navigationOptions) !== null;
119
119
  const canNext = getNextStepRoute(route, navigationOptions) !== null;
120
120
  const FullscreenIcon = isFullscreen ? MinimizeIcon : MaximizeIcon;
121
+ const groupClass =
122
+ "flex items-center gap-0.5 rounded-md bg-white/[0.04] px-0.5 py-0.5 sm:bg-transparent sm:p-0";
121
123
 
122
124
  return (
123
125
  // Hover zone — transparent, occupies the bottom strip
124
126
  <div
125
- className="honeydeck-nav-zone fixed bottom-0 left-0 right-0 h-20 z-50 flex items-end pointer-events-none"
127
+ className="honeydeck-nav-zone fixed bottom-0 left-0 right-0 h-28 z-50 flex items-end justify-center pointer-events-none sm:h-20 sm:justify-start"
126
128
  data-honeydeck-no-swipe="true"
127
129
  >
128
130
  {/* Actual bar */}
129
- <div className="honeydeck-nav-bar pointer-events-auto flex items-center gap-1 px-2 py-1.5 ml-6 mb-6 bg-black/70 backdrop-blur rounded-lg border border-white/10 shadow-[0_4px_24px_rgba(0,0,0,0.4)]">
130
- {/* Prev step */}
131
- <NavBarButton
132
- onClick={goPrev}
133
- label="Previous step (←)"
134
- disabled={!canPrev}
135
- >
136
- <ChevronLeftIcon aria-hidden="true" size={16} />
137
- </NavBarButton>
138
-
139
- {/* Slide number */}
140
- <span className="min-w-6 px-1 text-center font-sans text-sm tabular-nums text-white/60">
141
- {route.slide}
142
- </span>
143
-
144
- {/* Next step */}
145
- <NavBarButton
146
- onClick={goNext}
147
- label="Next step (→)"
148
- disabled={!canNext}
149
- >
150
- <ChevronRightIcon aria-hidden="true" size={16} />
151
- </NavBarButton>
152
-
153
- <NavBarDivider />
154
-
155
- {/* Overview */}
156
- <NavBarButton
157
- onClick={onToggleOverview}
158
- label="Overview (o)"
159
- active={isOverview}
160
- >
161
- <LayoutGridIcon aria-hidden="true" size={14} />
162
- </NavBarButton>
163
-
164
- {/* Layouts reference */}
165
- <NavBarButton
166
- onClick={() => openReference(route)}
167
- label="Layouts reference"
168
- >
169
- <BookOpenTextIcon aria-hidden="true" size={16} />
170
- </NavBarButton>
171
-
172
- {/* Docs website */}
173
- <NavBarButton onClick={openDocsWebsite} label="Docs website">
174
- <ExternalLinkIcon aria-hidden="true" size={15} />
175
- </NavBarButton>
176
-
177
- {/* Presenter mode */}
178
- {route.view !== "presenter" && (
131
+ <div className="honeydeck-nav-bar pointer-events-auto mx-2 mb-2 flex max-w-[calc(100vw-1rem)] flex-wrap items-center justify-center gap-1 rounded-lg border border-white/10 bg-black/70 px-1.5 py-1.5 shadow-[0_4px_24px_rgba(0,0,0,0.4)] backdrop-blur sm:mx-0 sm:ml-6 sm:mb-6 sm:max-w-none sm:flex-nowrap sm:justify-start sm:gap-1 sm:px-2">
132
+ <div className={groupClass}>
133
+ {/* Prev step */}
179
134
  <NavBarButton
180
- onClick={() => openPresenter(route)}
181
- label="Presenter mode (p)"
135
+ onClick={goPrev}
136
+ label="Previous step ()"
137
+ disabled={!canPrev}
182
138
  >
183
- <PresentationIcon aria-hidden="true" size={16} />
139
+ <ChevronLeftIcon aria-hidden="true" size={16} />
184
140
  </NavBarButton>
185
- )}
186
141
 
187
- {/* Fullscreen */}
188
- <NavBarButton onClick={toggleFullscreen} label="Fullscreen (f)">
189
- <FullscreenIcon aria-hidden="true" size={16} />
190
- </NavBarButton>
142
+ {/* Slide number */}
143
+ <span className="min-w-6 px-1 text-center font-sans text-sm tabular-nums text-white/60">
144
+ {route.slide}
145
+ </span>
191
146
 
192
- {showTextSelectionToggle && onToggleTextSelection && (
147
+ {/* Next step */}
193
148
  <NavBarButton
194
- onClick={onToggleTextSelection}
195
- label={
196
- isTextSelectionEnabled
197
- ? "Disable slide text selection"
198
- : "Enable slide text selection"
199
- }
200
- active={isTextSelectionEnabled}
149
+ onClick={goNext}
150
+ label="Next step (→)"
151
+ disabled={!canNext}
201
152
  >
202
- <TextSelectIcon aria-hidden="true" size={16} />
153
+ <ChevronRightIcon aria-hidden="true" size={16} />
203
154
  </NavBarButton>
204
- )}
155
+ </div>
205
156
 
206
- <NavBarDivider />
157
+ <div className="hidden sm:block">
158
+ <NavBarDivider />
159
+ </div>
207
160
 
208
- {isZoomed && onResetZoom && (
209
- <NavBarButton onClick={onResetZoom} label="Reset zoom">
210
- <RotateCcwIcon aria-hidden="true" size={16} />
161
+ <div className={groupClass}>
162
+ {/* Overview */}
163
+ <NavBarButton
164
+ onClick={onToggleOverview}
165
+ label="Overview (o)"
166
+ active={isOverview}
167
+ >
168
+ <LayoutGridIcon aria-hidden="true" size={14} />
169
+ </NavBarButton>
170
+
171
+ {/* Layouts reference */}
172
+ <NavBarButton
173
+ onClick={() => openReference(route)}
174
+ label="Layouts reference"
175
+ >
176
+ <BookOpenTextIcon aria-hidden="true" size={16} />
211
177
  </NavBarButton>
212
- )}
213
-
214
- {/* Color mode */}
215
- <ColorModeCycleButton
216
- colorMode={colorMode}
217
- onSetColorMode={onSetColorMode}
218
- className={navBarButtonClass()}
219
- />
178
+
179
+ {/* Docs website */}
180
+ <NavBarButton onClick={openDocsWebsite} label="Docs website">
181
+ <ExternalLinkIcon aria-hidden="true" size={15} />
182
+ </NavBarButton>
183
+
184
+ {/* Presenter mode */}
185
+ {route.view !== "presenter" && (
186
+ <NavBarButton
187
+ onClick={() => openPresenter(route)}
188
+ label="Presenter mode (p)"
189
+ >
190
+ <PresentationIcon aria-hidden="true" size={16} />
191
+ </NavBarButton>
192
+ )}
193
+ </div>
194
+
195
+ <div className="hidden sm:block">
196
+ <NavBarDivider />
197
+ </div>
198
+
199
+ <div className={groupClass}>
200
+ {/* Fullscreen */}
201
+ <NavBarButton onClick={toggleFullscreen} label="Fullscreen (f)">
202
+ <FullscreenIcon aria-hidden="true" size={16} />
203
+ </NavBarButton>
204
+
205
+ {showTextSelectionToggle && onToggleTextSelection && (
206
+ <NavBarButton
207
+ onClick={onToggleTextSelection}
208
+ label={
209
+ isTextSelectionEnabled
210
+ ? "Disable slide text selection"
211
+ : "Enable slide text selection"
212
+ }
213
+ active={isTextSelectionEnabled}
214
+ >
215
+ <TextSelectIcon aria-hidden="true" size={16} />
216
+ </NavBarButton>
217
+ )}
218
+
219
+ {isZoomed && onResetZoom && (
220
+ <NavBarButton onClick={onResetZoom} label="Reset zoom">
221
+ <RotateCcwIcon aria-hidden="true" size={16} />
222
+ </NavBarButton>
223
+ )}
224
+
225
+ {/* Color mode */}
226
+ <ColorModeCycleButton
227
+ colorMode={colorMode}
228
+ onSetColorMode={onSetColorMode}
229
+ className={navBarButtonClass()}
230
+ />
231
+ </div>
220
232
  </div>
221
233
  </div>
222
234
  );
@@ -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