@atom63/slides 0.1.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/LICENSE +21 -0
- package/README.md +210 -0
- package/dist/chunk-AD3ZOVWR.js +6149 -0
- package/dist/chunk-AD3ZOVWR.js.map +1 -0
- package/dist/editor/index.css +68 -0
- package/dist/editor/index.css.map +1 -0
- package/dist/editor/index.d.ts +96 -0
- package/dist/editor/index.js +252 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/index.css +68 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +1284 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/template-registry-BOJP4rlI.d.ts +81 -0
- package/dist/vite/index.d.ts +30 -0
- package/dist/vite/index.js +121 -0
- package/dist/vite/index.js.map +1 -0
- package/package.json +139 -0
- package/src/editor/styles.css +206 -0
- package/src/editor/styles.d.ts +1 -0
- package/src/styles/slides.css +30 -0
- package/src/styles/theme-defaults.css +223 -0
- package/src/styles/themes/bold.css +48 -0
- package/src/styles/themes/dark.css +45 -0
- package/src/styles/themes/editorial.css +48 -0
- package/src/styles/themes/neon.css +47 -0
- package/src/styles/themes/terminal.css +50 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,1284 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { ReactNode, HTMLAttributes, ImgHTMLAttributes } from 'react';
|
|
4
|
+
import { S as SlideLayout, a as SlideDeckItem } from './template-registry-BOJP4rlI.js';
|
|
5
|
+
export { P as ParsedSlide, b as SlideDeckMeta, c as SlotDef, d as SlotGroupDef, e as SlotKind, T as TemplateCategory, f as TemplateDef, g as TemplateName, h as getTemplate, l as listTemplates, t as templateNames, i as templateRegistry } from './template-registry-BOJP4rlI.js';
|
|
6
|
+
import * as zustand_middleware from 'zustand/middleware';
|
|
7
|
+
import * as zustand from 'zustand';
|
|
8
|
+
|
|
9
|
+
interface SlideGateProvider {
|
|
10
|
+
fetchConfigured: (slug: string) => Promise<boolean>;
|
|
11
|
+
gateEnvVarName: (slug: string) => string;
|
|
12
|
+
isUnlocked: (slug: string) => boolean;
|
|
13
|
+
setUnlocked: (slug: string) => void;
|
|
14
|
+
verify: (slug: string, code: string) => Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Presenter script for the current slide — hidden on stage, surfaced in panels. */
|
|
18
|
+
declare function TalkTrack({ children }: {
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
21
|
+
declare namespace TalkTrack {
|
|
22
|
+
var displayName: string;
|
|
23
|
+
}
|
|
24
|
+
/** Hidden marker that sets the frame section label for this and following slides. */
|
|
25
|
+
declare function Section({ children }: {
|
|
26
|
+
children: ReactNode;
|
|
27
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
28
|
+
declare namespace Section {
|
|
29
|
+
var displayName: string;
|
|
30
|
+
}
|
|
31
|
+
declare function Slide({ children, layout }: {
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
layout?: SlideLayout;
|
|
34
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
35
|
+
declare namespace Slide {
|
|
36
|
+
var displayName: string;
|
|
37
|
+
}
|
|
38
|
+
/** Small uppercase label — monospace, tracked-out. */
|
|
39
|
+
declare function Overline({ children }: {
|
|
40
|
+
children: ReactNode;
|
|
41
|
+
}): react_jsx_runtime.JSX.Element;
|
|
42
|
+
declare namespace Overline {
|
|
43
|
+
var displayName: string;
|
|
44
|
+
}
|
|
45
|
+
/** Small muted text — attribution, dates, metadata. */
|
|
46
|
+
declare function Caption({ children, reveal, index, }: {
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
reveal?: boolean;
|
|
49
|
+
index?: number;
|
|
50
|
+
}): react_jsx_runtime.JSX.Element;
|
|
51
|
+
declare namespace Caption {
|
|
52
|
+
var displayName: string;
|
|
53
|
+
}
|
|
54
|
+
/** Thin decorative line — not a slide break. */
|
|
55
|
+
declare function Divider$1(): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare namespace Divider$1 {
|
|
57
|
+
var displayName: string;
|
|
58
|
+
}
|
|
59
|
+
/** Large numeral — monospace display number. */
|
|
60
|
+
declare function SlideNumber({ children }: {
|
|
61
|
+
children: ReactNode;
|
|
62
|
+
}): react_jsx_runtime.JSX.Element;
|
|
63
|
+
declare namespace SlideNumber {
|
|
64
|
+
var displayName: string;
|
|
65
|
+
}
|
|
66
|
+
declare function SlideImage({ src, alt, fill, className, }: {
|
|
67
|
+
src: string;
|
|
68
|
+
alt: string;
|
|
69
|
+
fill?: boolean;
|
|
70
|
+
className?: string;
|
|
71
|
+
}): react_jsx_runtime.JSX.Element;
|
|
72
|
+
declare namespace SlideImage {
|
|
73
|
+
var displayName: string;
|
|
74
|
+
}
|
|
75
|
+
declare function SlideVideo({ src, alt, fill, className, }: {
|
|
76
|
+
src: string;
|
|
77
|
+
alt: string;
|
|
78
|
+
fill?: boolean;
|
|
79
|
+
className?: string;
|
|
80
|
+
}): react_jsx_runtime.JSX.Element;
|
|
81
|
+
declare namespace SlideVideo {
|
|
82
|
+
var displayName: string;
|
|
83
|
+
}
|
|
84
|
+
declare function SlideGrid({ children, columns, gap, }: {
|
|
85
|
+
children: ReactNode;
|
|
86
|
+
columns?: 2 | 3 | 4;
|
|
87
|
+
gap?: 'sm' | 'md' | 'lg';
|
|
88
|
+
}): react_jsx_runtime.JSX.Element;
|
|
89
|
+
declare namespace SlideGrid {
|
|
90
|
+
var displayName: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
type GapSize = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
94
|
+
type AlignOption = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
95
|
+
type JustifyOption = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
|
|
96
|
+
/** Multi-column layout with equal width columns */
|
|
97
|
+
declare function Columns({ children, count, gap, align, }: {
|
|
98
|
+
children: ReactNode;
|
|
99
|
+
count?: 2 | 3 | 4;
|
|
100
|
+
gap?: GapSize;
|
|
101
|
+
align?: AlignOption;
|
|
102
|
+
}): react_jsx_runtime.JSX.Element;
|
|
103
|
+
type SplitRatio = '1/1' | '2/1' | '1/2' | '3/1' | '1/3';
|
|
104
|
+
type TrioRatio = '1/1/1' | '2/1/1' | '1/2/1' | '1/1/2';
|
|
105
|
+
/**
|
|
106
|
+
* Two-up layout on the 12-column master grid. Use this for asymmetric
|
|
107
|
+
* splits (narrative + media, quote + photo, thesis + detail) without
|
|
108
|
+
* writing `colStart` / `colSpan` by hand. The ratio maps to fixed 12-col
|
|
109
|
+
* spans so slides using `Split` always align with slides using `<Grid>`.
|
|
110
|
+
*
|
|
111
|
+
* 1/1 → 6 + 6
|
|
112
|
+
* 2/1 → 8 + 4
|
|
113
|
+
* 1/2 → 4 + 8
|
|
114
|
+
* 3/1 → 9 + 3
|
|
115
|
+
* 1/3 → 3 + 9
|
|
116
|
+
*
|
|
117
|
+
* Pass two direct children; extra children are ignored.
|
|
118
|
+
*/
|
|
119
|
+
declare function Split({ children, ratio, gap, align, }: {
|
|
120
|
+
children: ReactNode;
|
|
121
|
+
ratio?: SplitRatio;
|
|
122
|
+
gap?: GapSize;
|
|
123
|
+
align?: AlignOption;
|
|
124
|
+
}): react_jsx_runtime.JSX.Element;
|
|
125
|
+
/**
|
|
126
|
+
* Three-up layout on the 12-column master grid. Same rhythm rules as
|
|
127
|
+
* `Split` — ratios resolve to 12-col spans so trios align with the rest
|
|
128
|
+
* of the deck.
|
|
129
|
+
*
|
|
130
|
+
* 1/1/1 → 4 + 4 + 4
|
|
131
|
+
* 2/1/1 → 6 + 3 + 3
|
|
132
|
+
* 1/2/1 → 3 + 6 + 3
|
|
133
|
+
* 1/1/2 → 3 + 3 + 6
|
|
134
|
+
*/
|
|
135
|
+
declare function Trio({ children, ratio, gap, align, }: {
|
|
136
|
+
children: ReactNode;
|
|
137
|
+
ratio?: TrioRatio;
|
|
138
|
+
gap?: GapSize;
|
|
139
|
+
align?: AlignOption;
|
|
140
|
+
}): react_jsx_runtime.JSX.Element;
|
|
141
|
+
/**
|
|
142
|
+
* CSS Grid foundation — the slide master grid.
|
|
143
|
+
*
|
|
144
|
+
* Every slide in the deck uses a shared **12-column** horizontal rhythm.
|
|
145
|
+
* This is what makes paging through the deck feel like one authored
|
|
146
|
+
* object instead of loose artboards: titles, media edges, and stat
|
|
147
|
+
* columns all snap to the same vertical lines slide-to-slide.
|
|
148
|
+
*
|
|
149
|
+
* Rows adapt to content (6 for three-up bentos, 8 for stat grids, etc.)
|
|
150
|
+
* but `cols` should stay at 12 unless you're writing a one-off full-bleed
|
|
151
|
+
* layout. If you find yourself overriding `cols`, consider whether the
|
|
152
|
+
* layout belongs behind a template instead.
|
|
153
|
+
*
|
|
154
|
+
* A Title rendered by `Grid` sits under a top hairline rule so the
|
|
155
|
+
* slide header reads as a Swiss editorial masthead.
|
|
156
|
+
*/
|
|
157
|
+
declare function Grid({ children, cols, rows, gap, label, title, ruled, }: {
|
|
158
|
+
children: ReactNode;
|
|
159
|
+
cols?: number;
|
|
160
|
+
rows?: number;
|
|
161
|
+
gap?: GapSize;
|
|
162
|
+
label?: string;
|
|
163
|
+
title?: string;
|
|
164
|
+
/** Draw the masthead hairline above label/title. Default true. */
|
|
165
|
+
ruled?: boolean;
|
|
166
|
+
}): react_jsx_runtime.JSX.Element;
|
|
167
|
+
type CellVariant = 'none' | 'muted' | 'outline' | 'accent' | 'rule' | 'frame' | 'solid';
|
|
168
|
+
type CellPadding = 'none' | 'sm' | 'md' | 'lg';
|
|
169
|
+
type CellOverflow = 'hidden' | 'visible';
|
|
170
|
+
/**
|
|
171
|
+
* A cell inside a `Grid`. Place via colStart/rowStart and span via colSpan/rowSpan.
|
|
172
|
+
*
|
|
173
|
+
* Variant vocabulary (Swiss-first):
|
|
174
|
+
* none — no chrome, just layout
|
|
175
|
+
* rule — top hairline only, transparent bg (the default bento treatment)
|
|
176
|
+
* frame — 1px hairline on all four sides, transparent bg
|
|
177
|
+
* outline — legacy alias for `frame`
|
|
178
|
+
* muted — filled plate (use sparingly, for dense data cells)
|
|
179
|
+
* accent — solid signal-color block with inverted text
|
|
180
|
+
* solid — solid foreground block with inverted text
|
|
181
|
+
*
|
|
182
|
+
* Corners are square by default — pass `rounded` for the exception.
|
|
183
|
+
*/
|
|
184
|
+
declare function Cell({ children, colSpan, rowSpan, colStart, rowStart, variant, padding, overflow, rounded, }: {
|
|
185
|
+
children: ReactNode;
|
|
186
|
+
colSpan?: number;
|
|
187
|
+
rowSpan?: number;
|
|
188
|
+
colStart?: number;
|
|
189
|
+
rowStart?: number;
|
|
190
|
+
variant?: CellVariant;
|
|
191
|
+
padding?: CellPadding;
|
|
192
|
+
overflow?: CellOverflow;
|
|
193
|
+
rounded?: boolean;
|
|
194
|
+
}): react_jsx_runtime.JSX.Element;
|
|
195
|
+
/** Vertical stack with consistent spacing */
|
|
196
|
+
declare function Stack({ children, gap, align, justify, className, }: {
|
|
197
|
+
children: ReactNode;
|
|
198
|
+
gap?: GapSize;
|
|
199
|
+
align?: AlignOption;
|
|
200
|
+
justify?: JustifyOption;
|
|
201
|
+
className?: string;
|
|
202
|
+
}): react_jsx_runtime.JSX.Element;
|
|
203
|
+
/** Horizontal row with alignment control */
|
|
204
|
+
declare function Row({ children, gap, align, justify, wrap, }: {
|
|
205
|
+
children: ReactNode;
|
|
206
|
+
gap?: GapSize;
|
|
207
|
+
align?: AlignOption;
|
|
208
|
+
justify?: JustifyOption;
|
|
209
|
+
wrap?: boolean;
|
|
210
|
+
}): react_jsx_runtime.JSX.Element;
|
|
211
|
+
/** Center content on both axes */
|
|
212
|
+
declare function Center({ children }: {
|
|
213
|
+
children: ReactNode;
|
|
214
|
+
}): react_jsx_runtime.JSX.Element;
|
|
215
|
+
/** Explicit whitespace — use for intentional spacing */
|
|
216
|
+
declare function Spacer({ size }: {
|
|
217
|
+
size?: GapSize;
|
|
218
|
+
}): react_jsx_runtime.JSX.Element;
|
|
219
|
+
type TextAlign = 'left' | 'center' | 'right';
|
|
220
|
+
type TextColor = 'default' | 'secondary' | 'muted' | 'accent' | 'inherit';
|
|
221
|
+
/**
|
|
222
|
+
* Hero numeral / single-word text. Light + tight tracking signals
|
|
223
|
+
* decorative, not authored. Use for big stats or one-word statements.
|
|
224
|
+
*/
|
|
225
|
+
declare function Display({ children, align, color, size, weight, }: {
|
|
226
|
+
children: ReactNode;
|
|
227
|
+
align?: TextAlign;
|
|
228
|
+
color?: TextColor;
|
|
229
|
+
size?: 'sm' | 'md' | 'lg';
|
|
230
|
+
weight?: 'extralight' | 'light' | 'regular' | 'medium';
|
|
231
|
+
}): react_jsx_runtime.JSX.Element;
|
|
232
|
+
/**
|
|
233
|
+
* Full-slide statement headline. Use when the whole slide is one
|
|
234
|
+
* sentence (keynote thesis, section opener). Always 128px.
|
|
235
|
+
*/
|
|
236
|
+
declare function Headline({ children, align, color, weight, }: {
|
|
237
|
+
children: ReactNode;
|
|
238
|
+
align?: TextAlign;
|
|
239
|
+
color?: TextColor;
|
|
240
|
+
weight?: 'light' | 'regular' | 'medium' | 'semibold';
|
|
241
|
+
}): react_jsx_runtime.JSX.Element;
|
|
242
|
+
/**
|
|
243
|
+
* Slide title. Use when the slide has supporting content below a heading.
|
|
244
|
+
* Always 72px. Defaults to medium — bump to semibold for covers.
|
|
245
|
+
*/
|
|
246
|
+
declare function Title({ children, align, color, weight, }: {
|
|
247
|
+
children: ReactNode;
|
|
248
|
+
align?: TextAlign;
|
|
249
|
+
color?: TextColor;
|
|
250
|
+
weight?: 'light' | 'regular' | 'medium' | 'semibold';
|
|
251
|
+
}): react_jsx_runtime.JSX.Element;
|
|
252
|
+
/**
|
|
253
|
+
* Sub-head under a Title, or a section label that still needs to read
|
|
254
|
+
* as type (not a Label). Always 44px. Color defaults to foreground —
|
|
255
|
+
* pass `color="muted"` for quieter sub-heads.
|
|
256
|
+
*/
|
|
257
|
+
declare function Subtitle({ children, align, color, weight, }: {
|
|
258
|
+
children: ReactNode;
|
|
259
|
+
align?: TextAlign;
|
|
260
|
+
color?: TextColor;
|
|
261
|
+
weight?: 'light' | 'regular' | 'medium' | 'semibold';
|
|
262
|
+
}): react_jsx_runtime.JSX.Element;
|
|
263
|
+
/** Paragraph text. `md` is the default — go sm for dense cells, lg for emphasis. */
|
|
264
|
+
declare function Body({ children, align, color, size, weight, reveal, index, }: {
|
|
265
|
+
children: ReactNode;
|
|
266
|
+
align?: TextAlign;
|
|
267
|
+
color?: TextColor;
|
|
268
|
+
size?: 'sm' | 'md' | 'lg';
|
|
269
|
+
weight?: 'light' | 'regular' | 'medium' | 'semibold';
|
|
270
|
+
reveal?: boolean;
|
|
271
|
+
index?: number;
|
|
272
|
+
}): react_jsx_runtime.JSX.Element;
|
|
273
|
+
/**
|
|
274
|
+
* Renders a body string that may contain `\n` line breaks as separate
|
|
275
|
+
* `<Body>` paragraphs with a gap between them. Use this instead of
|
|
276
|
+
* `<Body>{string}</Body>` whenever the text comes from a template prop.
|
|
277
|
+
*/
|
|
278
|
+
declare function BodyLines({ children, size, color, }: {
|
|
279
|
+
children: string;
|
|
280
|
+
size?: 'sm' | 'md' | 'lg';
|
|
281
|
+
color?: 'default' | 'muted' | 'secondary' | 'accent' | 'inherit';
|
|
282
|
+
}): react_jsx_runtime.JSX.Element;
|
|
283
|
+
/**
|
|
284
|
+
* Small uppercase annotation. One size only (18px). Use for eyebrows,
|
|
285
|
+
* figure captions, section markers, attribution lines.
|
|
286
|
+
*
|
|
287
|
+
* `orientation="vertical"` sets the label in the margin, running
|
|
288
|
+
* bottom-to-top — the Swiss gutter label treatment.
|
|
289
|
+
*/
|
|
290
|
+
declare function Label({ children, align, color, font, orientation, reveal, index, }: {
|
|
291
|
+
children: ReactNode;
|
|
292
|
+
align?: TextAlign;
|
|
293
|
+
color?: TextColor;
|
|
294
|
+
font?: 'mono' | 'sans';
|
|
295
|
+
orientation?: 'horizontal' | 'vertical';
|
|
296
|
+
reveal?: boolean;
|
|
297
|
+
index?: number;
|
|
298
|
+
}): react_jsx_runtime.JSX.Element;
|
|
299
|
+
/**
|
|
300
|
+
* Inline content highlight. `text-primary` is reserved for content
|
|
301
|
+
* emphasis — if you want a ghost tint, use `text-foreground/XX` directly.
|
|
302
|
+
*/
|
|
303
|
+
declare function Accent({ children, color, }: {
|
|
304
|
+
children: ReactNode;
|
|
305
|
+
color?: 'accent' | 'default';
|
|
306
|
+
}): react_jsx_runtime.JSX.Element;
|
|
307
|
+
/** Inline monospace for numbers, code, technical content. */
|
|
308
|
+
declare function Mono({ children, size, }: {
|
|
309
|
+
children: ReactNode;
|
|
310
|
+
size?: 'sm' | 'md' | 'lg';
|
|
311
|
+
}): react_jsx_runtime.JSX.Element;
|
|
312
|
+
/**
|
|
313
|
+
* Inline code token for use inside Body or template body props.
|
|
314
|
+
* Uses `em`-relative sizing so it scales with whatever Body size it sits in.
|
|
315
|
+
*/
|
|
316
|
+
declare function InlineCode({ children }: {
|
|
317
|
+
children: ReactNode;
|
|
318
|
+
}): react_jsx_runtime.JSX.Element;
|
|
319
|
+
/**
|
|
320
|
+
* Pull quote. `sm` for inline quotes inside a content slide, `lg` for a
|
|
321
|
+
* full-slide pull quote.
|
|
322
|
+
*
|
|
323
|
+
* The decorative open-quote glyph is positioned with a negative offset
|
|
324
|
+
* so it sits just outside the text block — beautiful inline but liable
|
|
325
|
+
* to clip when the quote is placed in the left column of a slide.
|
|
326
|
+
* Pass `decorated={false}` to suppress the glyph (the Swiss editorial
|
|
327
|
+
* treatment) and rely on rules + attribution to signal "quote".
|
|
328
|
+
*/
|
|
329
|
+
declare function Quote({ children, attribution, size, decorated, }: {
|
|
330
|
+
children: ReactNode;
|
|
331
|
+
attribution?: string;
|
|
332
|
+
size?: 'sm' | 'lg';
|
|
333
|
+
decorated?: boolean;
|
|
334
|
+
}): react_jsx_runtime.JSX.Element;
|
|
335
|
+
type ObjectFit = 'cover' | 'contain' | 'fill';
|
|
336
|
+
type AspectRatio = '16/9' | '4/3' | '1/1' | 'auto';
|
|
337
|
+
/**
|
|
338
|
+
* Syntax-highlighted code block sized for the slide canvas.
|
|
339
|
+
*
|
|
340
|
+
* Two usage modes:
|
|
341
|
+
* - Fenced code blocks in MDX (```tsx) render through this automatically via
|
|
342
|
+
* the `pre` override in slideMdxComponents — pass nothing, `children` carries
|
|
343
|
+
* the already-highlighted rehype-pretty-code output.
|
|
344
|
+
* - Explicit JSX usage: pass a `code` string prop and Shiki highlights it at
|
|
345
|
+
* runtime using the github-dark-dimmed theme.
|
|
346
|
+
*
|
|
347
|
+
* Font scales with --slide-type-scale like all other slide typography.
|
|
348
|
+
*/
|
|
349
|
+
declare function SlideCodeBlock({ children, language, code, dataTheme, }: {
|
|
350
|
+
children?: ReactNode;
|
|
351
|
+
language?: string;
|
|
352
|
+
/** Plain code string — triggers runtime Shiki highlighting. */
|
|
353
|
+
code?: string;
|
|
354
|
+
/** Forwarded from rehype-pretty-code's data-theme on the original <pre>. */
|
|
355
|
+
dataTheme?: string;
|
|
356
|
+
}): react_jsx_runtime.JSX.Element;
|
|
357
|
+
/** Image with fit modes and optional aspect-ratio container. Square corners by default. */
|
|
358
|
+
declare function Image({ src, alt, fit, rounded, aspectRatio, className, caption, }: {
|
|
359
|
+
src: string;
|
|
360
|
+
alt: string;
|
|
361
|
+
fit?: ObjectFit;
|
|
362
|
+
rounded?: boolean;
|
|
363
|
+
aspectRatio?: AspectRatio;
|
|
364
|
+
className?: string;
|
|
365
|
+
caption?: string;
|
|
366
|
+
}): react_jsx_runtime.JSX.Element;
|
|
367
|
+
/**
|
|
368
|
+
* Video with autoplay/loop and optional aspect-ratio container.
|
|
369
|
+
*
|
|
370
|
+
* Play/pause is driven by IntersectionObserver so the video only runs when
|
|
371
|
+
* its slide is visible. On exit the video pauses and resets to the start so
|
|
372
|
+
* revisiting the slide always replays from the beginning — standard
|
|
373
|
+
* presentation behavior. `autoPlay={false}` on the HTML element prevents
|
|
374
|
+
* the browser from playing before visibility is confirmed.
|
|
375
|
+
*/
|
|
376
|
+
declare function Video({ src, fit, rounded, aspectRatio, autoPlay, loop, muted, poster, caption, }: {
|
|
377
|
+
src: string;
|
|
378
|
+
fit?: ObjectFit;
|
|
379
|
+
rounded?: boolean;
|
|
380
|
+
aspectRatio?: AspectRatio;
|
|
381
|
+
autoPlay?: boolean;
|
|
382
|
+
loop?: boolean;
|
|
383
|
+
muted?: boolean;
|
|
384
|
+
/** Static frame shown while the video is loading or the slide is off-screen. */
|
|
385
|
+
poster?: string;
|
|
386
|
+
caption?: string;
|
|
387
|
+
}): react_jsx_runtime.JSX.Element;
|
|
388
|
+
/** Material icon at slide scale */
|
|
389
|
+
declare function Icon({ name, size, color, }: {
|
|
390
|
+
name: string;
|
|
391
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
392
|
+
color?: TextColor;
|
|
393
|
+
}): react_jsx_runtime.JSX.Element;
|
|
394
|
+
/** Circular avatar image. Avatars are the one primitive that stays rounded — intentional human marker. */
|
|
395
|
+
declare function Avatar({ src, alt, size, }: {
|
|
396
|
+
src: string;
|
|
397
|
+
alt: string;
|
|
398
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
399
|
+
}): react_jsx_runtime.JSX.Element;
|
|
400
|
+
type BoxVariant = 'default' | 'muted' | 'outline' | 'accent' | 'solid';
|
|
401
|
+
/** Container with background/border/padding. Square corners by default. */
|
|
402
|
+
declare function Box({ children, variant, padding, rounded, className, }: {
|
|
403
|
+
children: ReactNode;
|
|
404
|
+
variant?: BoxVariant;
|
|
405
|
+
padding?: 'none' | 'sm' | 'md' | 'lg';
|
|
406
|
+
rounded?: boolean;
|
|
407
|
+
className?: string;
|
|
408
|
+
}): react_jsx_runtime.JSX.Element;
|
|
409
|
+
/** Horizontal or vertical rule. Accent is a solid 2px signal-color bar. */
|
|
410
|
+
declare function Divider({ direction, color, weight, }: {
|
|
411
|
+
direction?: 'horizontal' | 'vertical';
|
|
412
|
+
color?: 'muted' | 'accent' | 'default';
|
|
413
|
+
weight?: 'thin' | 'thick';
|
|
414
|
+
}): react_jsx_runtime.JSX.Element;
|
|
415
|
+
/** Small square tag. Shares type sizing with `Label` (18px) so a Badge
|
|
416
|
+
* beside a Label reads on the same baseline. Hard-edged, hairline-framed —
|
|
417
|
+
* the Swiss form-tag treatment. */
|
|
418
|
+
declare function Badge({ children, variant, }: {
|
|
419
|
+
children: ReactNode;
|
|
420
|
+
variant?: 'muted' | 'accent' | 'outline' | 'solid';
|
|
421
|
+
}): react_jsx_runtime.JSX.Element;
|
|
422
|
+
/** Framed highlight block — hairline on all sides, no fill tint. Accent swaps to a solid signal-color block. */
|
|
423
|
+
declare function Highlight({ children, variant, }: {
|
|
424
|
+
children: ReactNode;
|
|
425
|
+
variant?: 'accent' | 'muted' | 'frame';
|
|
426
|
+
}): react_jsx_runtime.JSX.Element;
|
|
427
|
+
/**
|
|
428
|
+
* Solid color block. Full-bleed primary / foreground rectangle — use
|
|
429
|
+
* behind a word of Headline or a stat numeral for the Müller-Brockmann
|
|
430
|
+
* "color plate" move. Accepts children so text sits on the block with
|
|
431
|
+
* inverted color.
|
|
432
|
+
*/
|
|
433
|
+
declare function ColorBlock({ children, color, padding, className, }: {
|
|
434
|
+
children?: ReactNode;
|
|
435
|
+
color?: 'primary' | 'foreground';
|
|
436
|
+
padding?: 'none' | 'sm' | 'md' | 'lg';
|
|
437
|
+
className?: string;
|
|
438
|
+
}): react_jsx_runtime.JSX.Element;
|
|
439
|
+
/**
|
|
440
|
+
* Editorial form-stamp for media and data cells. Renders "FIG. 03 / 14"
|
|
441
|
+
* or any register/total pair in mono tabular nums. Use absolutely
|
|
442
|
+
* positioned inside a cell, or inline above a caption.
|
|
443
|
+
*/
|
|
444
|
+
declare function FigureMark({ register, total, prefix, className, }: {
|
|
445
|
+
register: number | string;
|
|
446
|
+
total?: number | string;
|
|
447
|
+
prefix?: string;
|
|
448
|
+
className?: string;
|
|
449
|
+
}): react_jsx_runtime.JSX.Element;
|
|
450
|
+
/**
|
|
451
|
+
* Large margin numeral — the Müller-Brockmann section marker. Renders a
|
|
452
|
+
* giant extralight numeral pushed off to one side with a vertical
|
|
453
|
+
* orientation. Place inside a 2-column slice on the outer edge of a
|
|
454
|
+
* slide.
|
|
455
|
+
*
|
|
456
|
+
* <SectionMarker number="03" caption="Foundations" />
|
|
457
|
+
*/
|
|
458
|
+
declare function SectionMarker({ number, caption, side, }: {
|
|
459
|
+
number: string;
|
|
460
|
+
caption?: string;
|
|
461
|
+
side?: 'left' | 'right';
|
|
462
|
+
}): react_jsx_runtime.JSX.Element;
|
|
463
|
+
/** Styled list with custom markers. Numbered lists use tabular mono for Swiss register. */
|
|
464
|
+
declare function List({ children, marker, gap, }: {
|
|
465
|
+
children: ReactNode;
|
|
466
|
+
marker?: 'dash' | 'number' | 'bullet' | 'none';
|
|
467
|
+
gap?: GapSize;
|
|
468
|
+
}): react_jsx_runtime.JSX.Element;
|
|
469
|
+
/** List item — use inside List. Size matches `Body` md so inline body
|
|
470
|
+
* text and list items read on the same baseline. */
|
|
471
|
+
declare function Item({ children, reveal, index, }: {
|
|
472
|
+
children: ReactNode;
|
|
473
|
+
reveal?: boolean;
|
|
474
|
+
index?: number;
|
|
475
|
+
}): react_jsx_runtime.JSX.Element;
|
|
476
|
+
/**
|
|
477
|
+
* Entrance animation wrapper. Wraps any content in a div that animates in
|
|
478
|
+
* when the slide becomes visible. Set `index` for staggered sequences.
|
|
479
|
+
*
|
|
480
|
+
* ```mdx
|
|
481
|
+
* <Reveal index={0}>First item</Reveal>
|
|
482
|
+
* <Reveal index={1}>Second item</Reveal>
|
|
483
|
+
* ```
|
|
484
|
+
*/
|
|
485
|
+
declare function Reveal({ children, index }: {
|
|
486
|
+
children: ReactNode;
|
|
487
|
+
index?: number;
|
|
488
|
+
}): react_jsx_runtime.JSX.Element;
|
|
489
|
+
/** Full-bleed container that breaks out of padding */
|
|
490
|
+
declare function Bleed({ children }: {
|
|
491
|
+
children: ReactNode;
|
|
492
|
+
}): react_jsx_runtime.JSX.Element;
|
|
493
|
+
/** Flex grow to push content */
|
|
494
|
+
declare function Fill(): react_jsx_runtime.JSX.Element;
|
|
495
|
+
/**
|
|
496
|
+
* Live — renders a React component at natural browser scale inside a slide.
|
|
497
|
+
*
|
|
498
|
+
* The slide canvas (1920×1080) is shrunk via `transform: scale(s)` in
|
|
499
|
+
* SlideStage. `Live` counter-acts that with `zoom: 1/s` (precomputed by
|
|
500
|
+
* SlideStage as `--slide-stage-zoom`) so components render at their
|
|
501
|
+
* natural CSS pixel size regardless of the window size.
|
|
502
|
+
*
|
|
503
|
+
* Size components with explicit CSS dimensions or Tailwind size utilities
|
|
504
|
+
* (e.g. `w-96`, `max-w-lg`). The parent `<Demo>` frame clips overflow and
|
|
505
|
+
* centers the content. Slide typography primitives (Headline, Body, etc.)
|
|
506
|
+
* are isolated via `--slide-type-scale: 0`.
|
|
507
|
+
*
|
|
508
|
+
* ```mdx
|
|
509
|
+
* <Demo aspectRatio="16/9">
|
|
510
|
+
* <Carousel className="max-w-lg">…</Carousel>
|
|
511
|
+
* </Demo>
|
|
512
|
+
* ```
|
|
513
|
+
*/
|
|
514
|
+
declare function Live({ children }: {
|
|
515
|
+
children: ReactNode;
|
|
516
|
+
}): react_jsx_runtime.JSX.Element;
|
|
517
|
+
declare namespace Live {
|
|
518
|
+
var displayName: string;
|
|
519
|
+
}
|
|
520
|
+
declare function Demo({ children, aspectRatio, padding, label, }: {
|
|
521
|
+
children: ReactNode;
|
|
522
|
+
/** CSS aspect-ratio — same ergonomics as the `aspectRatio` prop on `<Image>`. Defaults to `"16/9"`. */
|
|
523
|
+
aspectRatio?: string;
|
|
524
|
+
/** Inset padding inside the frame before the component renders. */
|
|
525
|
+
padding?: 'none' | 'sm' | 'md' | 'lg';
|
|
526
|
+
/** Optional figure caption rendered below the frame. */
|
|
527
|
+
label?: string;
|
|
528
|
+
}): react_jsx_runtime.JSX.Element;
|
|
529
|
+
declare namespace Demo {
|
|
530
|
+
var displayName: string;
|
|
531
|
+
}
|
|
532
|
+
/** Custom positioning wrapper */
|
|
533
|
+
declare function Position({ children, top, right, bottom, left, }: {
|
|
534
|
+
children: ReactNode;
|
|
535
|
+
top?: number | string;
|
|
536
|
+
right?: number | string;
|
|
537
|
+
bottom?: number | string;
|
|
538
|
+
left?: number | string;
|
|
539
|
+
}): react_jsx_runtime.JSX.Element;
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Syllabus / handout block for a slide deck.
|
|
543
|
+
*
|
|
544
|
+
* In presentation mode: renders as a hidden DOM container so the slide stage
|
|
545
|
+
* extractors (useSlidesDom, useSyllabus) can clone it into the reading layout.
|
|
546
|
+
*
|
|
547
|
+
* In web-syllabus mode: renders as a visible, styled document section.
|
|
548
|
+
* Write standard MDX headings (## Overview, ## Objectives, etc.) as children —
|
|
549
|
+
* no sub-component wrappers needed. Only <Syllabus.Meta> remains for
|
|
550
|
+
* structured key-value metadata (duration, format, audience, etc.).
|
|
551
|
+
*/
|
|
552
|
+
declare function Syllabus({ children }: {
|
|
553
|
+
children: ReactNode;
|
|
554
|
+
}): react_jsx_runtime.JSX.Element;
|
|
555
|
+
declare namespace Syllabus {
|
|
556
|
+
var displayName: string;
|
|
557
|
+
var Meta: {
|
|
558
|
+
({ duration, audience, format, location, date }: SyllabusMetaProps): react_jsx_runtime.JSX.Element | null;
|
|
559
|
+
displayName: string;
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
interface SyllabusMetaProps {
|
|
563
|
+
audience?: string;
|
|
564
|
+
date?: string;
|
|
565
|
+
duration?: string;
|
|
566
|
+
format?: string;
|
|
567
|
+
location?: string;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* Editorial cover slide — massive wrapping title top-left, optional eyebrow
|
|
572
|
+
* (typically a year or date) top-right, optional credit bottom-left.
|
|
573
|
+
* No subtitle, no badges, no image. Designed to feel like a magazine cover.
|
|
574
|
+
*
|
|
575
|
+
* The title uses the same pixel size as `Display lg` (160px) but semibold
|
|
576
|
+
* weight — Display is decorative/light, the cover is authored.
|
|
577
|
+
*
|
|
578
|
+
* A full-width hairline above the title turns the cover into a masthead.
|
|
579
|
+
*/
|
|
580
|
+
declare function CoverSlide({ title, subtitle, eyebrow, credit, logo, }: {
|
|
581
|
+
title: string;
|
|
582
|
+
/** Optional deck hook — one line under the main title (editorial cover). */
|
|
583
|
+
subtitle?: string;
|
|
584
|
+
/** Small text anchored to the top-right corner — typically a year or date. */
|
|
585
|
+
eyebrow?: string;
|
|
586
|
+
/** Small text anchored to the bottom-left corner — typically an author credit. */
|
|
587
|
+
credit?: string;
|
|
588
|
+
/** Optional brand mark rendered inline just above the title. */
|
|
589
|
+
logo?: ReactNode;
|
|
590
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
591
|
+
/** Full-bleed media slide — image/video fills the entire canvas.
|
|
592
|
+
* Optional label+title render in a solid bottom-left block.
|
|
593
|
+
*
|
|
594
|
+
* The overlay uses a hard-edged black block with white type — no blur,
|
|
595
|
+
* no transparency, no rounded corners. Swiss posters don't wash titles
|
|
596
|
+
* over photos; they cut a plate and set them flat. */
|
|
597
|
+
declare function FullBleedSlide({ mediaSrc, mediaAlt, mediaType, label, title, }: {
|
|
598
|
+
mediaSrc: string;
|
|
599
|
+
mediaAlt?: string;
|
|
600
|
+
mediaType?: 'image' | 'video';
|
|
601
|
+
label?: string;
|
|
602
|
+
title?: string;
|
|
603
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
604
|
+
/**
|
|
605
|
+
* Full-bleed image or video with **cover-style** typography — top masthead band
|
|
606
|
+
* + bottom title plate, both solid black with white type (no blur, no tinted
|
|
607
|
+
* washes). Use for workshop openers, chapter covers, and hero beats where
|
|
608
|
+
* `CoverSlide` (type-only) is too empty but `FullBleedSlide` (small bottom-left
|
|
609
|
+
* caption only) is too little structure.
|
|
610
|
+
*
|
|
611
|
+
* The photo shows in the middle band; keep contrast on the plates only.
|
|
612
|
+
*/
|
|
613
|
+
declare function FullBleedCoverSlide({ title, subtitle, eyebrow, credit, mediaSrc, mediaAlt, mediaType, mastheadLabel, }: {
|
|
614
|
+
title: string;
|
|
615
|
+
/** Hook under the main title — muted, like `CoverSlide` subtitle. */
|
|
616
|
+
subtitle?: string;
|
|
617
|
+
/** Small text on the top-right of the masthead band (e.g. year, “Workshop”). */
|
|
618
|
+
eyebrow?: string;
|
|
619
|
+
/** Credit line in the bottom plate, above a hairline — like `CoverSlide`. */
|
|
620
|
+
credit?: string;
|
|
621
|
+
mediaSrc: string;
|
|
622
|
+
mediaAlt?: string;
|
|
623
|
+
mediaType?: 'image' | 'video';
|
|
624
|
+
/** Left label in the top band; defaults to the deck’s cover glyph. */
|
|
625
|
+
mastheadLabel?: string;
|
|
626
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
627
|
+
/**
|
|
628
|
+
* Editorial quote slide — flush-left pull quote, attribution on its own
|
|
629
|
+
* line under a hairline. Previously centered; now composed on the 12-col
|
|
630
|
+
* grid so the quote sits on the same left edge as every other slide.
|
|
631
|
+
*/
|
|
632
|
+
declare function QuoteSlide({ quote, attribution }: {
|
|
633
|
+
quote: string;
|
|
634
|
+
attribution?: string;
|
|
635
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
636
|
+
type SectionAxis = 'editorial' | 'flush-left' | 'centered';
|
|
637
|
+
/**
|
|
638
|
+
* Section title slide.
|
|
639
|
+
*
|
|
640
|
+
* axis="editorial" (default when `number` is set) — huge margin numeral
|
|
641
|
+
* on the left, headline flush-left in the content area.
|
|
642
|
+
* The Müller-Brockmann section marker treatment.
|
|
643
|
+
* axis="flush-left" — simple flush-left heading, no margin numeral.
|
|
644
|
+
* axis="centered" — legacy axial layout.
|
|
645
|
+
*
|
|
646
|
+
* With `imageSrc` the layout always falls into a text-left / media-right
|
|
647
|
+
* split regardless of axis so the rhythm matches `Split` slides.
|
|
648
|
+
*/
|
|
649
|
+
declare function SectionSlide({ number, title, subtitle, imageSrc, imageAlt, axis, }: {
|
|
650
|
+
number?: string;
|
|
651
|
+
title: string;
|
|
652
|
+
subtitle?: string;
|
|
653
|
+
imageSrc?: string;
|
|
654
|
+
imageAlt?: string;
|
|
655
|
+
axis?: SectionAxis;
|
|
656
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
657
|
+
/**
|
|
658
|
+
* Thesis slide — one headline, optional kicker and subcopy.
|
|
659
|
+
*
|
|
660
|
+
* axis="flush-left" (default) — Swiss editorial: kicker + headline
|
|
661
|
+
* flush to the left, subtitle underneath capped at
|
|
662
|
+
* a readable measure. A hairline rule above the
|
|
663
|
+
* kicker ties the slide into the deck's frame.
|
|
664
|
+
* axis="centered" — legacy axial layout (opt-in only).
|
|
665
|
+
*/
|
|
666
|
+
declare function StatementSlide({ kicker, title, subtitle, axis, }: {
|
|
667
|
+
kicker?: string;
|
|
668
|
+
title: string;
|
|
669
|
+
subtitle?: string;
|
|
670
|
+
axis?: 'flush-left' | 'centered';
|
|
671
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
672
|
+
declare const splitHalfGaps: {
|
|
673
|
+
readonly md: "gap-6";
|
|
674
|
+
readonly lg: "gap-10";
|
|
675
|
+
readonly xl: "gap-16";
|
|
676
|
+
};
|
|
677
|
+
declare function SplitHalfPanel({ children, justify, }: {
|
|
678
|
+
children: ReactNode;
|
|
679
|
+
justify?: 'start' | 'center' | 'end';
|
|
680
|
+
}): react_jsx_runtime.JSX.Element;
|
|
681
|
+
/**
|
|
682
|
+
* Fifty-fifty deck split — vertical (columns) or horizontal (rows).
|
|
683
|
+
* Use two `SplitHalf.Panel` children: narrative vs media, thesis vs proof, etc.
|
|
684
|
+
*/
|
|
685
|
+
declare function SplitHalf({ children, axis, gap, label, title, }: {
|
|
686
|
+
children: ReactNode;
|
|
687
|
+
axis?: 'horizontal' | 'vertical';
|
|
688
|
+
gap?: keyof typeof splitHalfGaps;
|
|
689
|
+
label?: string;
|
|
690
|
+
title?: string;
|
|
691
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
692
|
+
declare namespace SplitHalf {
|
|
693
|
+
var Panel: typeof SplitHalfPanel;
|
|
694
|
+
}
|
|
695
|
+
interface ClosingContact {
|
|
696
|
+
/** Optional URL. When set, the value renders as an anchor — external
|
|
697
|
+
* http(s) links open in a new tab; mailto: and tel: open natively. */
|
|
698
|
+
href?: string;
|
|
699
|
+
label: string;
|
|
700
|
+
value: string;
|
|
701
|
+
}
|
|
702
|
+
/**
|
|
703
|
+
* Editorial closing slide — a deliberate bookend rather than a reversed
|
|
704
|
+
* cover. Title vertically centered so it reads as the final statement,
|
|
705
|
+
* flanked by a giant ▼ glyph acting as a typographic full-stop — part of
|
|
706
|
+
* the deck's primitive-shape vocabulary (▲ cover / ■ section / ◆ quote /
|
|
707
|
+
* ▼ closing). The footer is a tabular colophon — Web / Email / Also —
|
|
708
|
+
* each column labelled and aligned on the 12-col rhythm, so the last
|
|
709
|
+
* page of the deck reads like the colophon of a book.
|
|
710
|
+
*/
|
|
711
|
+
declare function ClosingSlide({ title, eyebrow, website, email, handles, }: {
|
|
712
|
+
title: string;
|
|
713
|
+
/** Small text anchored to the top-right corner (e.g. "2026", "Q&A"). */
|
|
714
|
+
eyebrow?: string;
|
|
715
|
+
/** Primary website URL rendered on its own line. */
|
|
716
|
+
website?: string;
|
|
717
|
+
/** Contact email rendered below the website. */
|
|
718
|
+
email?: string;
|
|
719
|
+
/** Supplementary contacts (handles, sites, tools). Each entry takes
|
|
720
|
+
* its own labelled column on the colophon row. Pass an `href` to
|
|
721
|
+
* make the value clickable — `website` and `email` are auto-linked. */
|
|
722
|
+
handles?: ClosingContact[];
|
|
723
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
724
|
+
declare function HeroBentoHero({ src, alt }: {
|
|
725
|
+
src: string;
|
|
726
|
+
alt?: string;
|
|
727
|
+
}): react_jsx_runtime.JSX.Element;
|
|
728
|
+
declare function HeroBentoCard({ title, body }: {
|
|
729
|
+
title: string;
|
|
730
|
+
body?: ReactNode;
|
|
731
|
+
}): react_jsx_runtime.JSX.Element;
|
|
732
|
+
declare function HeroBento({ children, label, title, }: {
|
|
733
|
+
children: ReactNode;
|
|
734
|
+
label?: string;
|
|
735
|
+
title?: string;
|
|
736
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
737
|
+
declare namespace HeroBento {
|
|
738
|
+
var Hero: typeof HeroBentoHero;
|
|
739
|
+
var Card: typeof HeroBentoCard;
|
|
740
|
+
}
|
|
741
|
+
declare function MediaTrioHero({ src, alt }: {
|
|
742
|
+
src: string;
|
|
743
|
+
alt?: string;
|
|
744
|
+
}): react_jsx_runtime.JSX.Element;
|
|
745
|
+
declare function MediaTrioMedia({ src, alt }: {
|
|
746
|
+
src: string;
|
|
747
|
+
alt?: string;
|
|
748
|
+
}): react_jsx_runtime.JSX.Element;
|
|
749
|
+
declare function MediaTrio({ children, label, title, }: {
|
|
750
|
+
children: ReactNode;
|
|
751
|
+
label?: string;
|
|
752
|
+
title?: string;
|
|
753
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
754
|
+
declare namespace MediaTrio {
|
|
755
|
+
var Hero: typeof MediaTrioHero;
|
|
756
|
+
var Media: typeof MediaTrioMedia;
|
|
757
|
+
}
|
|
758
|
+
declare function StatBentoBody({ children }: {
|
|
759
|
+
children: ReactNode;
|
|
760
|
+
}): react_jsx_runtime.JSX.Element;
|
|
761
|
+
declare function StatBentoStat({ value, label }: {
|
|
762
|
+
value: string;
|
|
763
|
+
label: string;
|
|
764
|
+
}): react_jsx_runtime.JSX.Element;
|
|
765
|
+
declare function StatBento({ children, label, title, }: {
|
|
766
|
+
children: ReactNode;
|
|
767
|
+
label?: string;
|
|
768
|
+
title?: string;
|
|
769
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
770
|
+
declare namespace StatBento {
|
|
771
|
+
var Body: typeof StatBentoBody;
|
|
772
|
+
var Stat: typeof StatBentoStat;
|
|
773
|
+
}
|
|
774
|
+
declare function CollageFeatured({ src, alt }: {
|
|
775
|
+
src: string;
|
|
776
|
+
alt?: string;
|
|
777
|
+
}): react_jsx_runtime.JSX.Element;
|
|
778
|
+
declare function CollageImage({ src, alt }: {
|
|
779
|
+
src: string;
|
|
780
|
+
alt?: string;
|
|
781
|
+
}): react_jsx_runtime.JSX.Element;
|
|
782
|
+
declare function Collage({ children, label, title, }: {
|
|
783
|
+
children: ReactNode;
|
|
784
|
+
label?: string;
|
|
785
|
+
title?: string;
|
|
786
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
787
|
+
declare namespace Collage {
|
|
788
|
+
var Featured: typeof CollageFeatured;
|
|
789
|
+
var Image: typeof CollageImage;
|
|
790
|
+
}
|
|
791
|
+
declare function QuoteWithMediaQuote({ text, attribution }: {
|
|
792
|
+
text: string;
|
|
793
|
+
attribution?: string;
|
|
794
|
+
}): react_jsx_runtime.JSX.Element;
|
|
795
|
+
declare function QuoteWithMediaMedia({ src, alt }: {
|
|
796
|
+
src: string;
|
|
797
|
+
alt?: string;
|
|
798
|
+
}): react_jsx_runtime.JSX.Element;
|
|
799
|
+
declare function QuoteWithMedia({ children, label, title, }: {
|
|
800
|
+
children: ReactNode;
|
|
801
|
+
label?: string;
|
|
802
|
+
title?: string;
|
|
803
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
804
|
+
declare namespace QuoteWithMedia {
|
|
805
|
+
var Quote: typeof QuoteWithMediaQuote;
|
|
806
|
+
var Media: typeof QuoteWithMediaMedia;
|
|
807
|
+
}
|
|
808
|
+
declare function SplitWithStatText({ title: cellTitle, body, bullets, }: {
|
|
809
|
+
title: string;
|
|
810
|
+
body?: ReactNode;
|
|
811
|
+
bullets?: string[];
|
|
812
|
+
}): react_jsx_runtime.JSX.Element;
|
|
813
|
+
declare function SplitWithStatMedia({ src, alt }: {
|
|
814
|
+
src: string;
|
|
815
|
+
alt?: string;
|
|
816
|
+
}): react_jsx_runtime.JSX.Element;
|
|
817
|
+
declare function SplitWithStatStat({ value, label }: {
|
|
818
|
+
value: string;
|
|
819
|
+
label: string;
|
|
820
|
+
}): react_jsx_runtime.JSX.Element;
|
|
821
|
+
declare function SplitWithStat({ children, label, title, }: {
|
|
822
|
+
children: ReactNode;
|
|
823
|
+
label?: string;
|
|
824
|
+
title?: string;
|
|
825
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
826
|
+
declare namespace SplitWithStat {
|
|
827
|
+
var Text: typeof SplitWithStatText;
|
|
828
|
+
var Media: typeof SplitWithStatMedia;
|
|
829
|
+
var Stat: typeof SplitWithStatStat;
|
|
830
|
+
}
|
|
831
|
+
declare function TextLeadText({ title: cellTitle, body, bullets, }: {
|
|
832
|
+
title?: string;
|
|
833
|
+
body?: ReactNode;
|
|
834
|
+
bullets?: string[];
|
|
835
|
+
}): react_jsx_runtime.JSX.Element;
|
|
836
|
+
declare function TextLeadMedia({ src, alt }: {
|
|
837
|
+
src: string;
|
|
838
|
+
alt?: string;
|
|
839
|
+
}): react_jsx_runtime.JSX.Element;
|
|
840
|
+
declare function TextLead({ children, label, title, }: {
|
|
841
|
+
children: ReactNode;
|
|
842
|
+
label?: string;
|
|
843
|
+
title?: string;
|
|
844
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
845
|
+
declare namespace TextLead {
|
|
846
|
+
var Text: typeof TextLeadText;
|
|
847
|
+
var Media: typeof TextLeadMedia;
|
|
848
|
+
}
|
|
849
|
+
declare function TimelineBentoIntro({ title: cellTitle, body }: {
|
|
850
|
+
title: string;
|
|
851
|
+
body?: ReactNode;
|
|
852
|
+
}): react_jsx_runtime.JSX.Element;
|
|
853
|
+
declare function TimelineBentoStep({ step, title: cellTitle, body, }: {
|
|
854
|
+
step?: string;
|
|
855
|
+
title: string;
|
|
856
|
+
body?: ReactNode;
|
|
857
|
+
}): react_jsx_runtime.JSX.Element;
|
|
858
|
+
declare function TimelineBento({ children, label, title, }: {
|
|
859
|
+
children: ReactNode;
|
|
860
|
+
label?: string;
|
|
861
|
+
title?: string;
|
|
862
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
863
|
+
declare namespace TimelineBento {
|
|
864
|
+
var Intro: typeof TimelineBentoIntro;
|
|
865
|
+
var Step: typeof TimelineBentoStep;
|
|
866
|
+
}
|
|
867
|
+
declare function FullBleedGalleryImage({ src, alt }: {
|
|
868
|
+
src: string;
|
|
869
|
+
alt?: string;
|
|
870
|
+
}): react_jsx_runtime.JSX.Element;
|
|
871
|
+
declare function FullBleedGallery({ children, label, title, }: {
|
|
872
|
+
children: ReactNode;
|
|
873
|
+
label?: string;
|
|
874
|
+
title?: string;
|
|
875
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
876
|
+
declare namespace FullBleedGallery {
|
|
877
|
+
var Image: typeof FullBleedGalleryImage;
|
|
878
|
+
}
|
|
879
|
+
/**
|
|
880
|
+
* Single full-bleed image. Use when the visual is the entire message.
|
|
881
|
+
* Optional caption renders as a translucent bottom bar.
|
|
882
|
+
*/
|
|
883
|
+
declare function ImageSlide({ src, alt, caption, }: {
|
|
884
|
+
src: string;
|
|
885
|
+
alt?: string;
|
|
886
|
+
/** Short descriptor — renders as a translucent bottom bar. */
|
|
887
|
+
caption?: string;
|
|
888
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
889
|
+
/**
|
|
890
|
+
* Two images side by side, equal width, full bleed.
|
|
891
|
+
* A hairline gap separates the panels — editorial column rule.
|
|
892
|
+
*/
|
|
893
|
+
declare function ImageDuoSlide({ left, right, caption, }: {
|
|
894
|
+
left: {
|
|
895
|
+
src: string;
|
|
896
|
+
alt?: string;
|
|
897
|
+
};
|
|
898
|
+
right: {
|
|
899
|
+
src: string;
|
|
900
|
+
alt?: string;
|
|
901
|
+
};
|
|
902
|
+
/** Short descriptor — renders as a translucent bottom bar spanning both images. */
|
|
903
|
+
caption?: string;
|
|
904
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
905
|
+
/**
|
|
906
|
+
* Three images in equal columns, full bleed.
|
|
907
|
+
* Accepts 2–3 images; fewer than 3 leaves remaining columns as a muted placeholder.
|
|
908
|
+
*/
|
|
909
|
+
declare function ImageTrioSlide({ images, caption, }: {
|
|
910
|
+
images: {
|
|
911
|
+
src: string;
|
|
912
|
+
alt?: string;
|
|
913
|
+
}[];
|
|
914
|
+
/** Short descriptor — renders as a translucent bottom bar spanning all columns. */
|
|
915
|
+
caption?: string;
|
|
916
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
917
|
+
|
|
918
|
+
declare function SlideBreak(): react_jsx_runtime.JSX.Element;
|
|
919
|
+
declare namespace SlideBreak {
|
|
920
|
+
var displayName: string;
|
|
921
|
+
}
|
|
922
|
+
declare const slideMdxComponents: {
|
|
923
|
+
h1: ({ children }: {
|
|
924
|
+
children?: ReactNode;
|
|
925
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
926
|
+
h2: ({ children }: {
|
|
927
|
+
children?: ReactNode;
|
|
928
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
929
|
+
h3: ({ children }: {
|
|
930
|
+
children?: ReactNode;
|
|
931
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
932
|
+
p: ({ children }: {
|
|
933
|
+
children?: ReactNode;
|
|
934
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
935
|
+
ul: ({ children }: {
|
|
936
|
+
children?: ReactNode;
|
|
937
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
938
|
+
ol: ({ children }: {
|
|
939
|
+
children?: ReactNode;
|
|
940
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
941
|
+
li: ({ children }: {
|
|
942
|
+
children?: ReactNode;
|
|
943
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
944
|
+
strong: ({ children }: {
|
|
945
|
+
children?: ReactNode;
|
|
946
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
947
|
+
code: ({ children }: {
|
|
948
|
+
children?: ReactNode;
|
|
949
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
950
|
+
blockquote: ({ children }: {
|
|
951
|
+
children?: ReactNode;
|
|
952
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
953
|
+
figure: ({ children }: {
|
|
954
|
+
children?: ReactNode;
|
|
955
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
956
|
+
pre: ({ children, ...props }: React.HTMLAttributes<HTMLPreElement> & {
|
|
957
|
+
"data-language"?: string;
|
|
958
|
+
"data-theme"?: string;
|
|
959
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
960
|
+
hr: typeof SlideBreak;
|
|
961
|
+
TalkTrack: typeof TalkTrack;
|
|
962
|
+
Syllabus: typeof Syllabus;
|
|
963
|
+
Slide: typeof Slide;
|
|
964
|
+
SlideImage: typeof SlideImage;
|
|
965
|
+
SlideVideo: typeof SlideVideo;
|
|
966
|
+
SlideGrid: typeof SlideGrid;
|
|
967
|
+
Overline: typeof Overline;
|
|
968
|
+
Caption: typeof Caption;
|
|
969
|
+
LegacyDivider: typeof Divider$1;
|
|
970
|
+
SlideNumber: typeof SlideNumber;
|
|
971
|
+
Section: typeof Section;
|
|
972
|
+
Columns: typeof Columns;
|
|
973
|
+
Grid: typeof Grid;
|
|
974
|
+
Cell: typeof Cell;
|
|
975
|
+
Split: typeof Split;
|
|
976
|
+
Trio: typeof Trio;
|
|
977
|
+
Stack: typeof Stack;
|
|
978
|
+
Row: typeof Row;
|
|
979
|
+
Center: typeof Center;
|
|
980
|
+
Spacer: typeof Spacer;
|
|
981
|
+
Display: typeof Display;
|
|
982
|
+
Headline: typeof Headline;
|
|
983
|
+
Title: typeof Title;
|
|
984
|
+
Subtitle: typeof Subtitle;
|
|
985
|
+
Body: typeof Body;
|
|
986
|
+
Label: typeof Label;
|
|
987
|
+
Accent: typeof Accent;
|
|
988
|
+
Mono: typeof Mono;
|
|
989
|
+
InlineCode: typeof InlineCode;
|
|
990
|
+
Quote: typeof Quote;
|
|
991
|
+
SlideCodeBlock: typeof SlideCodeBlock;
|
|
992
|
+
Image: typeof Image;
|
|
993
|
+
Video: typeof Video;
|
|
994
|
+
Icon: typeof Icon;
|
|
995
|
+
Avatar: typeof Avatar;
|
|
996
|
+
Box: typeof Box;
|
|
997
|
+
Divider: typeof Divider;
|
|
998
|
+
Badge: typeof Badge;
|
|
999
|
+
Highlight: typeof Highlight;
|
|
1000
|
+
ColorBlock: typeof ColorBlock;
|
|
1001
|
+
FigureMark: typeof FigureMark;
|
|
1002
|
+
SectionMarker: typeof SectionMarker;
|
|
1003
|
+
List: typeof List;
|
|
1004
|
+
Item: typeof Item;
|
|
1005
|
+
Bleed: typeof Bleed;
|
|
1006
|
+
Fill: typeof Fill;
|
|
1007
|
+
Demo: typeof Demo;
|
|
1008
|
+
Live: typeof Live;
|
|
1009
|
+
Position: typeof Position;
|
|
1010
|
+
Reveal: typeof Reveal;
|
|
1011
|
+
CoverSlide: typeof CoverSlide;
|
|
1012
|
+
FullBleedCoverSlide: typeof FullBleedCoverSlide;
|
|
1013
|
+
QuoteSlide: typeof QuoteSlide;
|
|
1014
|
+
SectionSlide: typeof SectionSlide;
|
|
1015
|
+
StatementSlide: typeof StatementSlide;
|
|
1016
|
+
SplitHalf: typeof SplitHalf;
|
|
1017
|
+
ClosingSlide: typeof ClosingSlide;
|
|
1018
|
+
HeroBento: typeof HeroBento;
|
|
1019
|
+
MediaTrio: typeof MediaTrio;
|
|
1020
|
+
StatBento: typeof StatBento;
|
|
1021
|
+
Collage: typeof Collage;
|
|
1022
|
+
FullBleedGallery: typeof FullBleedGallery;
|
|
1023
|
+
QuoteWithMedia: typeof QuoteWithMedia;
|
|
1024
|
+
SplitWithStat: typeof SplitWithStat;
|
|
1025
|
+
TextLead: typeof TextLead;
|
|
1026
|
+
TimelineBento: typeof TimelineBento;
|
|
1027
|
+
h4: ({ className, ...props }: react.ComponentProps<"h4">) => react_jsx_runtime.JSX.Element;
|
|
1028
|
+
h5: ({ className, ...props }: react.ComponentProps<"h5">) => react_jsx_runtime.JSX.Element;
|
|
1029
|
+
h6: ({ className, ...props }: react.ComponentProps<"h6">) => react_jsx_runtime.JSX.Element;
|
|
1030
|
+
a: ({ className, href, target, rel, children, ...props }: react.ComponentProps<"a">) => react_jsx_runtime.JSX.Element;
|
|
1031
|
+
em: ({ className, ...props }: react.ComponentProps<"em">) => react_jsx_runtime.JSX.Element;
|
|
1032
|
+
del: ({ className, ...props }: react.ComponentProps<"del">) => react_jsx_runtime.JSX.Element;
|
|
1033
|
+
ins: ({ className, ...props }: react.ComponentProps<"ins">) => react_jsx_runtime.JSX.Element;
|
|
1034
|
+
kbd: ({ className, ...props }: react.ComponentProps<"kbd">) => react_jsx_runtime.JSX.Element;
|
|
1035
|
+
mark: ({ className, ...props }: react.ComponentProps<"mark">) => react_jsx_runtime.JSX.Element;
|
|
1036
|
+
sub: ({ className, ...props }: react.ComponentProps<"sub">) => react_jsx_runtime.JSX.Element;
|
|
1037
|
+
sup: ({ className, ...props }: react.ComponentProps<"sup">) => react_jsx_runtime.JSX.Element;
|
|
1038
|
+
abbr: ({ className, ...props }: react.ComponentProps<"abbr">) => react_jsx_runtime.JSX.Element;
|
|
1039
|
+
cite: ({ className, ...props }: react.ComponentProps<"cite">) => react_jsx_runtime.JSX.Element;
|
|
1040
|
+
dfn: ({ className, ...props }: react.ComponentProps<"dfn">) => react_jsx_runtime.JSX.Element;
|
|
1041
|
+
time: ({ className, ...props }: react.ComponentProps<"time">) => react_jsx_runtime.JSX.Element;
|
|
1042
|
+
var: ({ className, ...props }: react.ComponentProps<"var">) => react_jsx_runtime.JSX.Element;
|
|
1043
|
+
samp: ({ className, ...props }: react.ComponentProps<"samp">) => react_jsx_runtime.JSX.Element;
|
|
1044
|
+
output: ({ className, ...props }: react.ComponentProps<"output">) => react_jsx_runtime.JSX.Element;
|
|
1045
|
+
details: ({ className, ...props }: react.ComponentProps<"details">) => react_jsx_runtime.JSX.Element;
|
|
1046
|
+
summary: ({ className, ...props }: react.ComponentProps<"summary">) => react_jsx_runtime.JSX.Element;
|
|
1047
|
+
iframe: ({ className, ...props }: react.ComponentProps<"iframe">) => react_jsx_runtime.JSX.Element;
|
|
1048
|
+
video: ({ className, ...props }: react.ComponentProps<"video">) => react_jsx_runtime.JSX.Element;
|
|
1049
|
+
audio: ({ className, ...props }: react.ComponentProps<"audio">) => react_jsx_runtime.JSX.Element;
|
|
1050
|
+
img: ({ className, alt, ...props }: react.ComponentProps<"img">) => react_jsx_runtime.JSX.Element;
|
|
1051
|
+
table: ({ className, ...props }: react.ComponentProps<"table">) => react_jsx_runtime.JSX.Element;
|
|
1052
|
+
thead: ({ className, ...props }: react.ComponentProps<"thead">) => react_jsx_runtime.JSX.Element;
|
|
1053
|
+
tbody: ({ className, ...props }: react.ComponentProps<"tbody">) => react_jsx_runtime.JSX.Element;
|
|
1054
|
+
tr: ({ className, ...props }: react.ComponentProps<"tr">) => react_jsx_runtime.JSX.Element;
|
|
1055
|
+
th: ({ className, ...props }: react.ComponentProps<"th">) => react_jsx_runtime.JSX.Element;
|
|
1056
|
+
td: ({ className, ...props }: react.ComponentProps<"td">) => react_jsx_runtime.JSX.Element;
|
|
1057
|
+
caption: ({ className, ...props }: react.ComponentProps<"caption">) => react_jsx_runtime.JSX.Element;
|
|
1058
|
+
};
|
|
1059
|
+
|
|
1060
|
+
declare function SyllabusBody({ children }: {
|
|
1061
|
+
children?: ReactNode;
|
|
1062
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1063
|
+
declare function SyllabusHeadline({ children }: {
|
|
1064
|
+
children?: ReactNode;
|
|
1065
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1066
|
+
declare function SyllabusTitle({ children }: {
|
|
1067
|
+
children?: ReactNode;
|
|
1068
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1069
|
+
declare function SyllabusSubtitle({ children }: {
|
|
1070
|
+
children?: ReactNode;
|
|
1071
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1072
|
+
declare function SyllabusDisplay({ children }: {
|
|
1073
|
+
children?: ReactNode;
|
|
1074
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1075
|
+
declare function SyllabusLabel({ children }: {
|
|
1076
|
+
children?: ReactNode;
|
|
1077
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1078
|
+
declare function SyllabusMono({ children }: {
|
|
1079
|
+
children?: ReactNode;
|
|
1080
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1081
|
+
declare function SyllabusAccent({ children }: {
|
|
1082
|
+
children?: ReactNode;
|
|
1083
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1084
|
+
interface SyllabusQuoteProps {
|
|
1085
|
+
attribution?: string;
|
|
1086
|
+
children?: ReactNode;
|
|
1087
|
+
decorated?: boolean;
|
|
1088
|
+
size?: 'lg' | 'sm';
|
|
1089
|
+
}
|
|
1090
|
+
declare function SyllabusQuote({ children, attribution }: SyllabusQuoteProps): react_jsx_runtime.JSX.Element;
|
|
1091
|
+
declare const listGap: {
|
|
1092
|
+
readonly sm: "space-y-1";
|
|
1093
|
+
readonly md: "space-y-1.5";
|
|
1094
|
+
readonly lg: "space-y-2";
|
|
1095
|
+
};
|
|
1096
|
+
declare function SyllabusList({ children, marker, gap, }: {
|
|
1097
|
+
children?: ReactNode;
|
|
1098
|
+
gap?: keyof typeof listGap;
|
|
1099
|
+
marker?: 'bullet' | 'dash' | 'none' | 'number';
|
|
1100
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1101
|
+
declare function SyllabusItem({ children }: {
|
|
1102
|
+
children?: ReactNode;
|
|
1103
|
+
}): react_jsx_runtime.JSX.Element;
|
|
1104
|
+
declare const syllabusMdxComponents: {
|
|
1105
|
+
h1: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1106
|
+
h2: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1107
|
+
h3: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1108
|
+
h4: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1109
|
+
h5: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1110
|
+
h6: (props: HTMLAttributes<HTMLHeadingElement>) => react_jsx_runtime.JSX.Element;
|
|
1111
|
+
p: (props: HTMLAttributes<HTMLParagraphElement>) => react_jsx_runtime.JSX.Element;
|
|
1112
|
+
ul: (props: HTMLAttributes<HTMLUListElement>) => react_jsx_runtime.JSX.Element;
|
|
1113
|
+
ol: (props: HTMLAttributes<HTMLOListElement>) => react_jsx_runtime.JSX.Element;
|
|
1114
|
+
li: (props: HTMLAttributes<HTMLLIElement>) => react_jsx_runtime.JSX.Element;
|
|
1115
|
+
blockquote: (props: HTMLAttributes<HTMLElement>) => react_jsx_runtime.JSX.Element;
|
|
1116
|
+
img: ({ alt, className, ...props }: ImgHTMLAttributes<HTMLImageElement>) => react_jsx_runtime.JSX.Element;
|
|
1117
|
+
Body: typeof SyllabusBody;
|
|
1118
|
+
Headline: typeof SyllabusHeadline;
|
|
1119
|
+
Title: typeof SyllabusTitle;
|
|
1120
|
+
Subtitle: typeof SyllabusSubtitle;
|
|
1121
|
+
Display: typeof SyllabusDisplay;
|
|
1122
|
+
Label: typeof SyllabusLabel;
|
|
1123
|
+
Mono: typeof SyllabusMono;
|
|
1124
|
+
Accent: typeof SyllabusAccent;
|
|
1125
|
+
Quote: typeof SyllabusQuote;
|
|
1126
|
+
List: typeof SyllabusList;
|
|
1127
|
+
Item: typeof SyllabusItem;
|
|
1128
|
+
a: ({ className, href, target, rel, children, ...props }: react.ComponentProps<"a">) => react_jsx_runtime.JSX.Element;
|
|
1129
|
+
strong: ({ className, ...props }: react.ComponentProps<"strong">) => react_jsx_runtime.JSX.Element;
|
|
1130
|
+
em: ({ className, ...props }: react.ComponentProps<"em">) => react_jsx_runtime.JSX.Element;
|
|
1131
|
+
del: ({ className, ...props }: react.ComponentProps<"del">) => react_jsx_runtime.JSX.Element;
|
|
1132
|
+
ins: ({ className, ...props }: react.ComponentProps<"ins">) => react_jsx_runtime.JSX.Element;
|
|
1133
|
+
code: ({ className, ...props }: react.ComponentProps<"code">) => react_jsx_runtime.JSX.Element;
|
|
1134
|
+
kbd: ({ className, ...props }: react.ComponentProps<"kbd">) => react_jsx_runtime.JSX.Element;
|
|
1135
|
+
mark: ({ className, ...props }: react.ComponentProps<"mark">) => react_jsx_runtime.JSX.Element;
|
|
1136
|
+
sub: ({ className, ...props }: react.ComponentProps<"sub">) => react_jsx_runtime.JSX.Element;
|
|
1137
|
+
sup: ({ className, ...props }: react.ComponentProps<"sup">) => react_jsx_runtime.JSX.Element;
|
|
1138
|
+
abbr: ({ className, ...props }: react.ComponentProps<"abbr">) => react_jsx_runtime.JSX.Element;
|
|
1139
|
+
cite: ({ className, ...props }: react.ComponentProps<"cite">) => react_jsx_runtime.JSX.Element;
|
|
1140
|
+
dfn: ({ className, ...props }: react.ComponentProps<"dfn">) => react_jsx_runtime.JSX.Element;
|
|
1141
|
+
time: ({ className, ...props }: react.ComponentProps<"time">) => react_jsx_runtime.JSX.Element;
|
|
1142
|
+
var: ({ className, ...props }: react.ComponentProps<"var">) => react_jsx_runtime.JSX.Element;
|
|
1143
|
+
samp: ({ className, ...props }: react.ComponentProps<"samp">) => react_jsx_runtime.JSX.Element;
|
|
1144
|
+
output: ({ className, ...props }: react.ComponentProps<"output">) => react_jsx_runtime.JSX.Element;
|
|
1145
|
+
details: ({ className, ...props }: react.ComponentProps<"details">) => react_jsx_runtime.JSX.Element;
|
|
1146
|
+
summary: ({ className, ...props }: react.ComponentProps<"summary">) => react_jsx_runtime.JSX.Element;
|
|
1147
|
+
iframe: ({ className, ...props }: react.ComponentProps<"iframe">) => react_jsx_runtime.JSX.Element;
|
|
1148
|
+
video: ({ className, ...props }: react.ComponentProps<"video">) => react_jsx_runtime.JSX.Element;
|
|
1149
|
+
audio: ({ className, ...props }: react.ComponentProps<"audio">) => react_jsx_runtime.JSX.Element;
|
|
1150
|
+
pre: ({ className, children, ...props }: react.ComponentProps<"pre">) => react_jsx_runtime.JSX.Element;
|
|
1151
|
+
hr: ({ className, ...props }: react.ComponentProps<"hr">) => react_jsx_runtime.JSX.Element;
|
|
1152
|
+
table: ({ className, ...props }: react.ComponentProps<"table">) => react_jsx_runtime.JSX.Element;
|
|
1153
|
+
thead: ({ className, ...props }: react.ComponentProps<"thead">) => react_jsx_runtime.JSX.Element;
|
|
1154
|
+
tbody: ({ className, ...props }: react.ComponentProps<"tbody">) => react_jsx_runtime.JSX.Element;
|
|
1155
|
+
tr: ({ className, ...props }: react.ComponentProps<"tr">) => react_jsx_runtime.JSX.Element;
|
|
1156
|
+
th: ({ className, ...props }: react.ComponentProps<"th">) => react_jsx_runtime.JSX.Element;
|
|
1157
|
+
td: ({ className, ...props }: react.ComponentProps<"td">) => react_jsx_runtime.JSX.Element;
|
|
1158
|
+
caption: ({ className, ...props }: react.ComponentProps<"caption">) => react_jsx_runtime.JSX.Element;
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
interface SlidesPlayerProps {
|
|
1162
|
+
deck: SlideDeckItem;
|
|
1163
|
+
initialSlide?: number;
|
|
1164
|
+
onBack: () => void;
|
|
1165
|
+
onSlideChange?: (index: number) => void;
|
|
1166
|
+
/** When provided, the toolbar shows a "</> MDX" toggle that calls this. */
|
|
1167
|
+
onToggleSource?: () => void;
|
|
1168
|
+
isSourceOpen?: boolean;
|
|
1169
|
+
gateProvider?: SlideGateProvider;
|
|
1170
|
+
renderCodeGate?: (props: {
|
|
1171
|
+
backLabel: string;
|
|
1172
|
+
onBack: () => void;
|
|
1173
|
+
onUnlock: () => void;
|
|
1174
|
+
subtitle: string;
|
|
1175
|
+
title: string;
|
|
1176
|
+
verifyCode: (code: string) => Promise<boolean>;
|
|
1177
|
+
}) => React.ReactNode;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
/**
|
|
1181
|
+
* Host-agnostic presentation player. Receives a fully-loaded deck and renders
|
|
1182
|
+
* the full presentation UI (stage, sidebar, toolbar, keyboard nav).
|
|
1183
|
+
*
|
|
1184
|
+
* The host is responsible for: page meta, content loading, gate persistence,
|
|
1185
|
+
* and routing. This component only handles presentation orchestration.
|
|
1186
|
+
*/
|
|
1187
|
+
declare function SlidesPlayer({ deck, initialSlide, onBack, onSlideChange, onToggleSource, isSourceOpen, gateProvider, renderCodeGate, }: SlidesPlayerProps): react_jsx_runtime.JSX.Element;
|
|
1188
|
+
|
|
1189
|
+
/**
|
|
1190
|
+
* Slide Configurator Store
|
|
1191
|
+
*
|
|
1192
|
+
* Global visual density config for the slides app. Phase 1 exposes a
|
|
1193
|
+
* single `padding` setting that drives the default `Cell` padding and
|
|
1194
|
+
* `Grid` gap. Phase 2 will extend this with color/typography fields.
|
|
1195
|
+
*
|
|
1196
|
+
* Persisted to localStorage so the selected padding survives reloads.
|
|
1197
|
+
*/
|
|
1198
|
+
type SlideConfigPadding = 'sm' | 'md' | 'lg';
|
|
1199
|
+
/**
|
|
1200
|
+
* Slide-only type multiplier. Applied as a CSS variable
|
|
1201
|
+
* (`--slide-type-scale`) on the slide content root; every slide
|
|
1202
|
+
* primitive wraps its canvas-px sizes in `calc(Npx * var(--slide-type-scale, 1))`
|
|
1203
|
+
* so nudging this knob scales every piece of slide text in lockstep.
|
|
1204
|
+
*
|
|
1205
|
+
* Deliberately isolated from the site-wide `--typography-scale`: the
|
|
1206
|
+
* slide artboard is sovereign, tuned to exact px ratios, and should
|
|
1207
|
+
* not follow global UI density changes.
|
|
1208
|
+
*/
|
|
1209
|
+
type SlideConfigTypographyScale = 'sm' | 'md' | 'lg' | 'xl';
|
|
1210
|
+
declare const TYPOGRAPHY_SCALE_VALUES: Record<SlideConfigTypographyScale, number>;
|
|
1211
|
+
interface SlideConfigState {
|
|
1212
|
+
padding: SlideConfigPadding;
|
|
1213
|
+
reset: () => void;
|
|
1214
|
+
showInlineTalkTrack: boolean;
|
|
1215
|
+
showPagination: boolean;
|
|
1216
|
+
typographyScale: SlideConfigTypographyScale;
|
|
1217
|
+
updateConfig: (patch: Partial<Omit<SlideConfigState, 'updateConfig' | 'reset'>>) => void;
|
|
1218
|
+
}
|
|
1219
|
+
/**
|
|
1220
|
+
* Content safe-area inset in pixels. Horizontal `px` matches where folio
|
|
1221
|
+
* chrome aligns on the left/right. Vertical `py` is larger than
|
|
1222
|
+
* `SLIDE_FRAME_WATERMARK_PX` so the layout grid sits below/above the thin
|
|
1223
|
+
* watermark band at the slide edges.
|
|
1224
|
+
*/
|
|
1225
|
+
declare const FRAME_PADDING_PX: Record<SlideConfigPadding, {
|
|
1226
|
+
px: number;
|
|
1227
|
+
py: number;
|
|
1228
|
+
}>;
|
|
1229
|
+
/**
|
|
1230
|
+
* Folio chrome offset from the slide top/bottom edges. Tighter than
|
|
1231
|
+
* `FRAME_PADDING_PX.py` so labels read as a margin watermark outside the
|
|
1232
|
+
* content grid while sharing the same horizontal gutters as `px`.
|
|
1233
|
+
*/
|
|
1234
|
+
declare const SLIDE_FRAME_WATERMARK_PX: Record<SlideConfigPadding, {
|
|
1235
|
+
pb: number;
|
|
1236
|
+
pt: number;
|
|
1237
|
+
}>;
|
|
1238
|
+
/**
|
|
1239
|
+
* Grid gap in pixels for each config padding level. Matches Tailwind's
|
|
1240
|
+
* `gap-4` / `gap-6` / `gap-10` utilities which the `Grid` primitive uses via
|
|
1241
|
+
* its `gapClasses` map, so the grid overlay renders the same gutters as the
|
|
1242
|
+
* real slide layout.
|
|
1243
|
+
*/
|
|
1244
|
+
declare const CONFIG_GAP_PX: Record<SlideConfigPadding, number>;
|
|
1245
|
+
declare const useSlideConfig: zustand.UseBoundStore<Omit<zustand.StoreApi<SlideConfigState>, "setState" | "persist"> & {
|
|
1246
|
+
setState(partial: SlideConfigState | Partial<SlideConfigState> | ((state: SlideConfigState) => SlideConfigState | Partial<SlideConfigState>), replace?: false | undefined): unknown;
|
|
1247
|
+
setState(state: SlideConfigState | ((state: SlideConfigState) => SlideConfigState), replace: true): unknown;
|
|
1248
|
+
persist: {
|
|
1249
|
+
setOptions: (options: Partial<zustand_middleware.PersistOptions<SlideConfigState, {
|
|
1250
|
+
padding: SlideConfigPadding;
|
|
1251
|
+
showPagination: boolean;
|
|
1252
|
+
showInlineTalkTrack: boolean;
|
|
1253
|
+
typographyScale: SlideConfigTypographyScale;
|
|
1254
|
+
}, unknown>>) => void;
|
|
1255
|
+
clearStorage: () => void;
|
|
1256
|
+
rehydrate: () => Promise<void> | void;
|
|
1257
|
+
hasHydrated: () => boolean;
|
|
1258
|
+
onHydrate: (fn: (state: SlideConfigState) => void) => () => void;
|
|
1259
|
+
onFinishHydration: (fn: (state: SlideConfigState) => void) => () => void;
|
|
1260
|
+
getOptions: () => Partial<zustand_middleware.PersistOptions<SlideConfigState, {
|
|
1261
|
+
padding: SlideConfigPadding;
|
|
1262
|
+
showPagination: boolean;
|
|
1263
|
+
showInlineTalkTrack: boolean;
|
|
1264
|
+
typographyScale: SlideConfigTypographyScale;
|
|
1265
|
+
}, unknown>>;
|
|
1266
|
+
};
|
|
1267
|
+
}>;
|
|
1268
|
+
/**
|
|
1269
|
+
* Replaces per-primitive Zustand subscriptions for `padding` with a single
|
|
1270
|
+
* subscription at the slide content root. Grid and Cell read this context
|
|
1271
|
+
* instead of subscribing independently — N subscriptions become 1.
|
|
1272
|
+
* Default matches the store default so the fallback is always correct.
|
|
1273
|
+
*/
|
|
1274
|
+
declare const SlidePaddingContext: react.Context<SlideConfigPadding>;
|
|
1275
|
+
declare const useSlidePadding: () => SlideConfigPadding;
|
|
1276
|
+
|
|
1277
|
+
type SlideRenderMode = 'presentation' | 'web-syllabus';
|
|
1278
|
+
/** Controls how slide components render. Default is presentation mode. */
|
|
1279
|
+
declare const SlideRenderModeContext: react.Context<SlideRenderMode>;
|
|
1280
|
+
declare function useSlideRenderMode(): SlideRenderMode;
|
|
1281
|
+
/** Signals to the syllabus page that a <Syllabus> block was actually rendered. */
|
|
1282
|
+
declare const SyllabusDetectContext: react.Context<(() => void) | null>;
|
|
1283
|
+
|
|
1284
|
+
export { Accent, Avatar, Badge, Bleed, Body, BodyLines, Box, CONFIG_GAP_PX, Cell, Center, ClosingSlide, Collage, ColorBlock, Columns, CoverSlide, Demo, Display, Divider, FRAME_PADDING_PX, FigureMark, Fill, FullBleedCoverSlide, FullBleedGallery, FullBleedSlide, Grid, Headline, HeroBento, Highlight, Icon, Image, ImageDuoSlide, ImageSlide, ImageTrioSlide, InlineCode, Item, Label, List, Live, MediaTrio, Mono, Position, Quote, QuoteSlide, QuoteWithMedia, Reveal, Row, SLIDE_FRAME_WATERMARK_PX, Section, SectionMarker, SectionSlide, SlideCodeBlock, type SlideConfigPadding, type SlideConfigTypographyScale, SlideDeckItem, type SlideGateProvider, SlideLayout, SlidePaddingContext, type SlideRenderMode, SlideRenderModeContext, SlidesPlayer, type SlidesPlayerProps, Spacer, Split, SplitHalf, SplitWithStat, Stack, StatBento, StatementSlide, Subtitle, Syllabus, SyllabusDetectContext, TYPOGRAPHY_SCALE_VALUES, TalkTrack, TextLead, TimelineBento, Title, Trio, Video, slideMdxComponents, syllabusMdxComponents, useSlideConfig, useSlidePadding, useSlideRenderMode };
|