@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/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.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,
|
|
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.
|
|
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,
|
|
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
|
|
|
@@ -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/
|
|
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
|
|
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
package/src/layouts/SPEC.md
CHANGED
|
@@ -1,170 +1,99 @@
|
|
|
1
|
-
# Honeydeck Layouts and
|
|
1
|
+
# Honeydeck Layouts and Customization Specification
|
|
2
2
|
|
|
3
|
-
> Observable behavior for
|
|
3
|
+
> Observable behavior for theme CSS, layout maps, built-in layouts, layout props, and layout demos.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Customization — Theme CSS, Layout Maps, Components
|
|
6
6
|
|
|
7
|
-
|
|
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
|
|
12
|
-
| Layouts |
|
|
13
|
-
| Components |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
24
|
+
This renders with the built-in default layout.
|
|
52
25
|
```
|
|
53
26
|
|
|
54
|
-
|
|
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
|
|
29
|
+
### Theme Layering
|
|
57
30
|
|
|
58
|
-
|
|
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
|
-
```
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
39
|
+
Honeydeck includes:
|
|
80
40
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
50
|
+
### CSS Overrides
|
|
92
51
|
|
|
93
|
-
Use standard CSS `@import`
|
|
52
|
+
Use standard CSS cascade and `@import` to layer overrides:
|
|
94
53
|
|
|
95
54
|
```css
|
|
96
|
-
|
|
97
|
-
@import
|
|
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
|
|
63
|
+
### Layout Maps
|
|
105
64
|
|
|
106
|
-
|
|
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
|
|
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
|
-
...
|
|
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
|
|
159
|
-
Level 2:
|
|
160
|
-
Level 3:
|
|
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
|
package/src/runtime/SPEC.md
CHANGED
|
@@ -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-
|
|
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
|
|
130
|
-
{
|
|
131
|
-
|
|
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={
|
|
181
|
-
label="
|
|
135
|
+
onClick={goPrev}
|
|
136
|
+
label="Previous step (←)"
|
|
137
|
+
disabled={!canPrev}
|
|
182
138
|
>
|
|
183
|
-
<
|
|
139
|
+
<ChevronLeftIcon aria-hidden="true" size={16} />
|
|
184
140
|
</NavBarButton>
|
|
185
|
-
)}
|
|
186
141
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
-
|
|
147
|
+
{/* Next step */}
|
|
193
148
|
<NavBarButton
|
|
194
|
-
onClick={
|
|
195
|
-
label=
|
|
196
|
-
|
|
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
|
-
<
|
|
153
|
+
<ChevronRightIcon aria-hidden="true" size={16} />
|
|
203
154
|
</NavBarButton>
|
|
204
|
-
|
|
155
|
+
</div>
|
|
205
156
|
|
|
206
|
-
<
|
|
157
|
+
<div className="hidden sm:block">
|
|
158
|
+
<NavBarDivider />
|
|
159
|
+
</div>
|
|
207
160
|
|
|
208
|
-
{
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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".
|
|
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
|
|