@bendyline/squisq-editor-react 1.1.0 → 1.1.1

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.
Files changed (45) hide show
  1. package/dist/EditorContext.d.ts +6 -2
  2. package/dist/EditorContext.d.ts.map +1 -1
  3. package/dist/EditorContext.js +3 -1
  4. package/dist/EditorContext.js.map +1 -1
  5. package/dist/EditorShell.d.ts +11 -1
  6. package/dist/EditorShell.d.ts.map +1 -1
  7. package/dist/EditorShell.js +9 -7
  8. package/dist/EditorShell.js.map +1 -1
  9. package/dist/ImageNodeView.d.ts +15 -0
  10. package/dist/ImageNodeView.d.ts.map +1 -0
  11. package/dist/ImageNodeView.js +52 -0
  12. package/dist/ImageNodeView.js.map +1 -0
  13. package/dist/PreviewControls.d.ts +41 -0
  14. package/dist/PreviewControls.d.ts.map +1 -0
  15. package/dist/PreviewControls.js +201 -0
  16. package/dist/PreviewControls.js.map +1 -0
  17. package/dist/PreviewPanel.d.ts +7 -7
  18. package/dist/PreviewPanel.d.ts.map +1 -1
  19. package/dist/PreviewPanel.js +183 -199
  20. package/dist/PreviewPanel.js.map +1 -1
  21. package/dist/Toolbar.d.ts +8 -1
  22. package/dist/Toolbar.d.ts.map +1 -1
  23. package/dist/Toolbar.js +4 -12
  24. package/dist/Toolbar.js.map +1 -1
  25. package/dist/WysiwygEditor.d.ts.map +1 -1
  26. package/dist/WysiwygEditor.js +3 -1
  27. package/dist/WysiwygEditor.js.map +1 -1
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/tiptapBridge.d.ts.map +1 -1
  33. package/dist/tiptapBridge.js +4 -5
  34. package/dist/tiptapBridge.js.map +1 -1
  35. package/package.json +5 -4
  36. package/src/EditorContext.tsx +8 -1
  37. package/src/EditorShell.tsx +71 -32
  38. package/src/ImageNodeView.tsx +70 -0
  39. package/src/PreviewControls.tsx +340 -0
  40. package/src/PreviewPanel.tsx +216 -287
  41. package/src/Toolbar.tsx +23 -6
  42. package/src/WysiwygEditor.tsx +3 -1
  43. package/src/index.ts +6 -0
  44. package/src/styles/editor.css +31 -8
  45. package/src/tiptapBridge.ts +5 -6
@@ -16,14 +16,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
16
  * (the player enters fallback-timer mode when audio can't load)
17
17
  * 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
18
18
  */
19
- import { useMemo, useState, useEffect } from 'react';
19
+ import { useState, useEffect } from 'react';
20
20
  import { DocPlayer, LinearDocView } from '@bendyline/squisq-react';
21
21
  import { flattenBlocks } from '@bendyline/squisq/doc';
22
22
  import { hasTemplate } from '@bendyline/squisq/doc';
23
23
  import { extractPlainText } from '@bendyline/squisq/markdown';
24
- import { VIEWPORT_PRESETS } from '@bendyline/squisq/schemas';
25
- import { getThemeSummaries, resolveTheme } from '@bendyline/squisq/schemas';
24
+ import { getChildren } from '@bendyline/squisq/markdown';
25
+ import { applyTransform } from '@bendyline/squisq/transform';
26
+ import { resolveAudioMapping } from '@bendyline/squisq/doc';
26
27
  import { useEditorContext } from './EditorContext';
28
+ import { usePreviewSettings } from './PreviewControls';
27
29
  // ── Helpers ────────────────────────────────────────────────────────
28
30
  /**
29
31
  * Extract plain text from an array of markdown block nodes.
@@ -38,6 +40,53 @@ function extractBodyText(contents) {
38
40
  }
39
41
  return parts.join('\n').trim();
40
42
  }
43
+ /**
44
+ * Extract images from a block's markdown contents.
45
+ * Walks the node tree recursively to find all MarkdownImage nodes.
46
+ */
47
+ function extractBlockImages(contents) {
48
+ if (!contents || contents.length === 0)
49
+ return [];
50
+ const images = [];
51
+ function walk(node) {
52
+ if ('type' in node && node.type === 'image' && 'url' in node) {
53
+ const img = node;
54
+ if (img.url) {
55
+ images.push({ src: img.url, alt: img.alt ?? '' });
56
+ }
57
+ }
58
+ for (const child of getChildren(node)) {
59
+ walk(child);
60
+ }
61
+ }
62
+ for (const node of contents) {
63
+ walk(node);
64
+ }
65
+ return images;
66
+ }
67
+ /**
68
+ * Collect all unique images from an entire Doc's block tree.
69
+ * Walks nested children to find every image across all blocks.
70
+ */
71
+ function collectAllDocImages(blocks) {
72
+ const seen = new Set();
73
+ const images = [];
74
+ function walkBlocks(blockList) {
75
+ for (const block of blockList) {
76
+ for (const img of extractBlockImages(block.contents)) {
77
+ if (!seen.has(img.src)) {
78
+ seen.add(img.src);
79
+ images.push(img);
80
+ }
81
+ }
82
+ if (block.children) {
83
+ walkBlocks(block.children);
84
+ }
85
+ }
86
+ }
87
+ walkBlocks(blocks);
88
+ return images;
89
+ }
41
90
  /**
42
91
  * Extract list items from markdown body content.
43
92
  * Returns an array of plain text strings for each list item found.
@@ -120,12 +169,18 @@ function getTemplateDefaults(templateName, headingText, block) {
120
169
  function blockToSlide(block, index) {
121
170
  const headingText = block.sourceHeading
122
171
  ? extractPlainText(block.sourceHeading)
123
- : block.id || `Slide ${index + 1}`;
172
+ : block.title || block.id || `Slide ${index + 1}`;
124
173
  // Validate template name — fall back to sectionHeader for unknowns
125
174
  const requestedTemplate = block.template || 'sectionHeader';
126
175
  const template = hasTemplate(requestedTemplate) ? requestedTemplate : 'sectionHeader';
127
176
  // Get sensible defaults for templates that need more than just `title`
128
177
  const defaults = getTemplateDefaults(template, headingText, block);
178
+ // Spread the block itself to pick up any template-specific fields
179
+ // placed directly on the block by applyTransform (e.g. stat, description,
180
+ // quote, colorScheme). These are not in templateOverrides — they live
181
+ // on the block object because the transform produces hybrid Block+Template
182
+ // objects via the timing allocator.
183
+ const { id: _id, startTime: _st, duration: _d, audioSegment: _as, layers: _l, transition: _tr, template: _t, title: _ti, children: _c, contents: _co, sourceHeading: _sh, templateOverrides: _to, ...extraFields } = block;
129
184
  return {
130
185
  id: block.id,
131
186
  template,
@@ -136,19 +191,93 @@ function blockToSlide(block, index) {
136
191
  title: headingText,
137
192
  // Template-specific defaults (safe fallbacks for required fields)
138
193
  ...defaults,
194
+ // Template-specific fields from transform (stat, description, quote, etc.)
195
+ ...extraFields,
139
196
  // Spread annotation overrides last so explicit values win
140
197
  ...block.templateOverrides,
141
198
  };
142
199
  }
200
+ /** Ambient motions to rotate on image slides. */
201
+ const IMAGE_MOTIONS = [
202
+ 'zoomIn',
203
+ 'zoomOut',
204
+ 'panLeft',
205
+ 'panRight',
206
+ ];
143
207
  /**
144
208
  * Build a player-ready Doc from the markdown-derived Doc.
145
209
  *
146
210
  * Flattens hierarchical blocks, converts each to a TemplateBlock-compatible
147
211
  * slide, recalculates timing, and adds a synthetic audio segment.
212
+ *
213
+ * Images found in the markdown are used in two ways:
214
+ * 1. Per-block: if a block has images, its first image becomes the background
215
+ * (via imageWithCaption template) or an accent image on text templates.
216
+ * 2. Global: remaining images are interleaved as standalone image slides
217
+ * for visual variety.
148
218
  */
149
219
  function buildPreviewDoc(doc) {
150
220
  const flat = flattenBlocks(doc.blocks);
151
- const slides = flat.map(blockToSlide);
221
+ // Collect all images from the doc for global interleaving
222
+ const allImages = collectAllDocImages(doc.blocks);
223
+ // Track which images are used per-block so we can interleave the rest
224
+ const usedImageSrcs = new Set();
225
+ // First pass: convert blocks to slides, using per-block images
226
+ const slides = [];
227
+ let motionIndex = 0;
228
+ for (let i = 0; i < flat.length; i++) {
229
+ const block = flat[i];
230
+ const blockImages = extractBlockImages(block.contents);
231
+ const slide = blockToSlide(block, i);
232
+ // If the block has images and is using the default sectionHeader template,
233
+ // upgrade it to imageWithCaption so the image becomes the slide background.
234
+ if (blockImages.length > 0 && slide.template === 'sectionHeader') {
235
+ const img = blockImages[0];
236
+ usedImageSrcs.add(img.src);
237
+ slide.template = 'imageWithCaption';
238
+ slide.imageSrc = img.src;
239
+ slide.imageAlt = img.alt;
240
+ slide.caption = slide.title;
241
+ slide.captionPosition = 'bottom';
242
+ slide.ambientMotion = IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length];
243
+ }
244
+ else if (blockImages.length > 0) {
245
+ // For other templates, add the first image as an accent
246
+ const img = blockImages[0];
247
+ usedImageSrcs.add(img.src);
248
+ if (!slide.accentImage) {
249
+ slide.accentImage = {
250
+ src: img.src,
251
+ alt: img.alt,
252
+ position: 'left-strip',
253
+ ambientMotion: IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length],
254
+ };
255
+ }
256
+ }
257
+ slides.push(slide);
258
+ }
259
+ // Second pass: interleave unused images as standalone imageWithCaption slides.
260
+ // Spread them evenly through the sequence for visual variety.
261
+ const unusedImages = allImages.filter((img) => !usedImageSrcs.has(img.src));
262
+ if (unusedImages.length > 0 && slides.length > 0) {
263
+ const interval = Math.max(2, Math.floor(slides.length / (unusedImages.length + 1)));
264
+ let insertOffset = 0;
265
+ for (let imgIdx = 0; imgIdx < unusedImages.length; imgIdx++) {
266
+ const insertAt = Math.min((imgIdx + 1) * interval + insertOffset, slides.length);
267
+ const img = unusedImages[imgIdx];
268
+ slides.splice(insertAt, 0, {
269
+ id: `img-interleave-${imgIdx}`,
270
+ template: 'imageWithCaption',
271
+ duration: 5,
272
+ audioSegment: 0,
273
+ imageSrc: img.src,
274
+ imageAlt: img.alt,
275
+ ambientMotion: IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length],
276
+ transition: { type: 'fade', duration: 0.5 },
277
+ });
278
+ insertOffset++;
279
+ }
280
+ }
152
281
  // Recalculate sequential timing
153
282
  let t = 0;
154
283
  for (const slide of slides) {
@@ -164,144 +293,53 @@ function buildPreviewDoc(doc) {
164
293
  // its fallback timer to advance currentTime via requestAnimationFrame.
165
294
  segments: t > 0 ? [{ src: '', name: 'preview', duration: t, startTime: 0 }] : [],
166
295
  },
296
+ ...(doc.captions ? { captions: doc.captions } : {}),
167
297
  };
168
298
  }
169
- // ── Viewport helpers ───────────────────────────────────────────────
170
- /** All viewport preset entries for the dropdown */
171
- const VIEWPORT_OPTIONS = [
172
- { key: 'landscape', label: '16:9 Landscape' },
173
- { key: 'portrait', label: '9:16 Portrait' },
174
- { key: 'square', label: '1:1 Square' },
175
- { key: 'standard', label: '4:3 Standard' },
176
- ];
177
- /**
178
- * Resolve a `document-render-as` frontmatter value to a ViewportPreset.
179
- * Accepts preset names ("landscape"), aspect ratio shorthand ("16:9"),
180
- * and common aliases ("widescreen", "vertical", "stories").
181
- */
182
- function resolveRenderAs(value) {
183
- if (typeof value !== 'string')
184
- return null;
185
- const v = value.trim().toLowerCase();
186
- const mapping = {
187
- landscape: 'landscape',
188
- '16:9': 'landscape',
189
- widescreen: 'landscape',
190
- portrait: 'portrait',
191
- '9:16': 'portrait',
192
- vertical: 'portrait',
193
- stories: 'portrait',
194
- square: 'square',
195
- '1:1': 'square',
196
- standard: 'standard',
197
- '4:3': 'standard',
198
- };
199
- return mapping[v] ?? null;
200
- }
201
- /** Display mode options for the dropdown */
202
- const DISPLAY_MODE_OPTIONS = [
203
- { key: 'video', label: 'Video' },
204
- { key: 'slideshow', label: 'Slideshow' },
205
- { key: 'linear', label: 'Document' },
206
- ];
207
- /** Theme options for the dropdown */
208
- const THEME_OPTIONS = getThemeSummaries().map((s) => ({ key: s.id, label: s.name }));
209
- /** Set of valid theme IDs for fast lookup */
210
- const VALID_THEME_IDS = new Set(THEME_OPTIONS.map((o) => o.key));
211
- /**
212
- * Resolve a `theme` frontmatter value to a theme id.
213
- * Accepts exact theme ids ('documentary', 'bold') and common aliases.
214
- */
215
- function resolveFrontmatterTheme(value) {
216
- if (typeof value !== 'string')
217
- return null;
218
- const v = value.trim().toLowerCase();
219
- if (VALID_THEME_IDS.has(v))
220
- return v;
221
- // Allow hyphenated/spaced aliases: "morning light" → "morning-light"
222
- const normalized = v.replace(/\s+/g, '-');
223
- if (VALID_THEME_IDS.has(normalized))
224
- return normalized;
225
- return null;
226
- }
227
- /**
228
- * Resolve a `display-mode` frontmatter value to a DisplayMode.
229
- */
230
- function resolveDisplayMode(value) {
231
- if (typeof value !== 'string')
232
- return null;
233
- const v = value.trim().toLowerCase();
234
- if (v === 'video' || v === 'slideshow' || v === 'linear')
235
- return v;
236
- if (v === 'slides' || v === 'presentation' || v === 'deck')
237
- return 'slideshow';
238
- if (v === 'document' || v === 'scroll' || v === 'page')
239
- return 'linear';
240
- return null;
241
- }
242
299
  // ── Component ──────────────────────────────────────────────────────
243
300
  /**
244
- * Live preview panel that renders the current document as a slideshow.
245
- * Uses DocPlayer from @bendyline/squisq-react for SVG block rendering
246
- * with template expansion, transitions, and playback controls.
247
- *
248
- * Includes a viewport format dropdown above the player. The default
249
- * format can be hinted via YAML frontmatter `document-render-as:`.
301
+ * Live preview panel that renders the current document as a slideshow
302
+ * or document view. Controls (viewport, mode, theme, transform, captions)
303
+ * are rendered in the main toolbar via PreviewToolbarControls.
250
304
  */
251
- export function PreviewPanel({ basePath = '/', className }) {
305
+ export function PreviewPanel({ basePath = '/', className, container }) {
252
306
  const { doc, parseError, isParsing } = useEditorContext();
253
- // Determine the frontmatter-hinted viewport preset (if any)
254
- const frontmatterPreset = useMemo(() => {
255
- if (!doc?.frontmatter)
256
- return null;
257
- return resolveRenderAs(doc.frontmatter['document-render-as']);
258
- }, [doc?.frontmatter]);
259
- // Track user-selected viewport; null means "use frontmatter or default"
260
- const [selectedPreset, setSelectedPreset] = useState(null);
261
- // When frontmatter preset changes and user hasn't explicitly chosen, sync
262
- useEffect(() => {
263
- setSelectedPreset(null);
264
- }, [frontmatterPreset]);
265
- // Active preset: explicit user choice > frontmatter hint > landscape
266
- const activePreset = selectedPreset ?? frontmatterPreset ?? 'landscape';
267
- const activeViewport = VIEWPORT_PRESETS[activePreset];
268
- // ── Display mode (video vs slideshow) ──────────────────────────
269
- // Determine the frontmatter-hinted display mode (if any)
270
- const frontmatterDisplayMode = useMemo(() => {
271
- if (!doc?.frontmatter)
272
- return null;
273
- return resolveDisplayMode(doc.frontmatter['display-mode']);
274
- }, [doc?.frontmatter]);
275
- // Track user-selected display mode; null means "use frontmatter or default"
276
- const [selectedDisplayMode, setSelectedDisplayMode] = useState(null);
277
- // When frontmatter display mode changes and user hasn't explicitly chosen, sync
307
+ const { activeViewport, activeDisplayMode, activeTheme, activeTransformStyle, activeCaptionStyle, } = usePreviewSettings();
308
+ // Build the player-ready Doc whenever the parsed doc changes.
309
+ // Transform runs on the ORIGINAL doc (which has block.contents with
310
+ // markdown body text) so the content extractor can analyze it.
311
+ // Then buildPreviewDoc converts the result for DocPlayer.
312
+ //
313
+ // Audio mapping is async (reads container files), so we use a two-phase
314
+ // approach: first build the base doc synchronously, then resolve audio
315
+ // in an effect and update the state.
316
+ const [previewDoc, setPreviewDoc] = useState(null);
278
317
  useEffect(() => {
279
- setSelectedDisplayMode(null);
280
- }, [frontmatterDisplayMode]);
281
- // Active display mode: explicit user choice > frontmatter hint > video
282
- const activeDisplayMode = selectedDisplayMode ?? frontmatterDisplayMode ?? 'video';
283
- // ── Theme selection ────────────────────────────────────────────
284
- // Determine the frontmatter-hinted theme (if any)
285
- const frontmatterThemeId = useMemo(() => {
286
- if (!doc?.frontmatter)
287
- return null;
288
- return resolveFrontmatterTheme(doc.frontmatter['theme']);
289
- }, [doc?.frontmatter]);
290
- // Track user-selected theme; null means "use frontmatter or default"
291
- const [selectedThemeId, setSelectedThemeId] = useState(null);
292
- // When frontmatter theme changes and user hasn't explicitly chosen, sync
293
- useEffect(() => {
294
- setSelectedThemeId(null);
295
- }, [frontmatterThemeId]);
296
- // Active theme: explicit user choice > frontmatter hint > documentary
297
- const activeThemeId = selectedThemeId ?? frontmatterThemeId ?? 'documentary';
298
- const activeTheme = useMemo(() => resolveTheme(activeThemeId), [activeThemeId]);
299
- // Build the player-ready Doc whenever the parsed doc changes
300
- const previewDoc = useMemo(() => {
301
- if (!doc || !doc.blocks.length)
302
- return null;
303
- return buildPreviewDoc(doc);
304
- }, [doc]);
318
+ if (!doc || !doc.blocks.length) {
319
+ setPreviewDoc(null);
320
+ return;
321
+ }
322
+ let sourceDoc = doc;
323
+ if (activeTransformStyle) {
324
+ const result = applyTransform(doc, activeTransformStyle);
325
+ sourceDoc = result.doc;
326
+ }
327
+ // If we have a container, try to resolve audio mapping before building preview
328
+ if (container) {
329
+ let cancelled = false;
330
+ resolveAudioMapping(sourceDoc, container).then((audioDoc) => {
331
+ if (!cancelled) {
332
+ setPreviewDoc(buildPreviewDoc(audioDoc));
333
+ }
334
+ });
335
+ // Set an immediate preview without audio while mapping resolves
336
+ setPreviewDoc(buildPreviewDoc(sourceDoc));
337
+ return () => {
338
+ cancelled = true;
339
+ };
340
+ }
341
+ setPreviewDoc(buildPreviewDoc(sourceDoc));
342
+ }, [doc, activeTransformStyle, container]);
305
343
  // Status overlays for non-ready states
306
344
  if (isParsing) {
307
345
  return (_jsx("div", { className: `squisq-preview-status ${className || ''}`, "data-testid": "preview-panel", children: _jsx("p", { children: "Parsing\u2026" }) }));
@@ -312,74 +350,20 @@ export function PreviewPanel({ basePath = '/', className }) {
312
350
  if (!previewDoc) {
313
351
  return (_jsx("div", { className: `squisq-preview-status ${className || ''}`, "data-testid": "preview-panel", children: _jsx("p", { children: "No content to preview. Start typing in the editor." }) }));
314
352
  }
315
- return (_jsxs("div", { className: `squisq-preview-container ${className || ''}`, "data-testid": "preview-panel", style: {
353
+ return (_jsx("div", { className: `squisq-preview-container ${className || ''}`, "data-testid": "preview-panel", style: {
316
354
  width: '100%',
317
355
  height: '100%',
318
356
  display: 'flex',
319
357
  flexDirection: 'column',
320
358
  overflow: 'hidden',
321
359
  background: 'var(--squisq-bg, #f5f5f5)',
322
- }, children: [_jsxs("div", { className: "squisq-preview-toolbar", style: {
323
- display: 'flex',
324
- alignItems: 'center',
325
- gap: '8px',
326
- padding: '6px 12px',
327
- borderBottom: '1px solid var(--squisq-border, #e0e0e0)',
328
- flexShrink: 0,
329
- fontSize: '13px',
330
- }, children: [_jsx("label", { htmlFor: "viewport-preset", style: { color: 'var(--squisq-text-muted, #6b7280)' }, children: "Format:" }), _jsx("select", { id: "viewport-preset", value: activePreset, onChange: (e) => setSelectedPreset(e.target.value), style: {
331
- padding: '3px 8px',
332
- borderRadius: '4px',
333
- border: '1px solid var(--squisq-border, #d1d5db)',
334
- background: 'var(--squisq-input-bg, #fff)',
335
- color: 'var(--squisq-text, #1f2937)',
336
- fontSize: '13px',
337
- cursor: 'pointer',
338
- }, children: VIEWPORT_OPTIONS.map((opt) => (_jsx("option", { value: opt.key, children: opt.label }, opt.key))) }), frontmatterPreset && selectedPreset === null && (_jsx("span", { style: {
339
- fontSize: '11px',
340
- color: 'var(--squisq-text-muted, #9ca3af)',
341
- fontStyle: 'italic',
342
- }, children: "(from frontmatter)" })), _jsx("span", { style: {
343
- width: '1px',
344
- height: '18px',
345
- background: 'var(--squisq-border, #d1d5db)',
346
- margin: '0 4px',
347
- } }), _jsx("label", { htmlFor: "display-mode", style: { color: 'var(--squisq-text-muted, #6b7280)' }, children: "Mode:" }), _jsx("select", { id: "display-mode", value: activeDisplayMode, onChange: (e) => setSelectedDisplayMode(e.target.value), style: {
348
- padding: '3px 8px',
349
- borderRadius: '4px',
350
- border: '1px solid var(--squisq-border, #d1d5db)',
351
- background: 'var(--squisq-input-bg, #fff)',
352
- color: 'var(--squisq-text, #1f2937)',
353
- fontSize: '13px',
354
- cursor: 'pointer',
355
- }, children: DISPLAY_MODE_OPTIONS.map((opt) => (_jsx("option", { value: opt.key, children: opt.label }, opt.key))) }), frontmatterDisplayMode && selectedDisplayMode === null && (_jsx("span", { style: {
356
- fontSize: '11px',
357
- color: 'var(--squisq-text-muted, #9ca3af)',
358
- fontStyle: 'italic',
359
- }, children: "(from frontmatter)" })), _jsx("span", { style: {
360
- width: '1px',
361
- height: '18px',
362
- background: 'var(--squisq-border, #d1d5db)',
363
- margin: '0 4px',
364
- } }), _jsx("label", { htmlFor: "theme-select", style: { color: 'var(--squisq-text-muted, #6b7280)' }, children: "Theme:" }), _jsx("select", { id: "theme-select", value: activeThemeId, onChange: (e) => setSelectedThemeId(e.target.value), style: {
365
- padding: '3px 8px',
366
- borderRadius: '4px',
367
- border: '1px solid var(--squisq-border, #d1d5db)',
368
- background: 'var(--squisq-input-bg, #fff)',
369
- color: 'var(--squisq-text, #1f2937)',
370
- fontSize: '13px',
371
- cursor: 'pointer',
372
- }, children: THEME_OPTIONS.map((opt) => (_jsx("option", { value: opt.key, children: opt.label }, opt.key))) }), frontmatterThemeId && selectedThemeId === null && (_jsx("span", { style: {
373
- fontSize: '11px',
374
- color: 'var(--squisq-text-muted, #9ca3af)',
375
- fontStyle: 'italic',
376
- }, children: "(from frontmatter)" }))] }), _jsx("div", { className: "squisq-preview-player", style: {
377
- flex: 1,
378
- display: 'flex',
379
- alignItems: activeDisplayMode === 'linear' ? 'stretch' : 'center',
380
- justifyContent: 'center',
381
- overflow: 'hidden',
382
- minHeight: 0,
383
- }, children: activeDisplayMode === 'linear' ? (_jsx(LinearDocView, { doc: doc, basePath: basePath, viewport: activeViewport, theme: activeTheme })) : (_jsx(DocPlayer, { script: previewDoc, basePath: basePath, showControls: true, muted: true, forceViewport: activeViewport, displayMode: activeDisplayMode, theme: activeTheme })) })] }));
360
+ }, children: _jsx("div", { className: "squisq-preview-player", style: {
361
+ flex: 1,
362
+ display: 'flex',
363
+ alignItems: activeDisplayMode === 'linear' ? 'stretch' : 'center',
364
+ justifyContent: 'center',
365
+ overflow: 'hidden',
366
+ minHeight: 0,
367
+ }, children: activeDisplayMode === 'linear' ? (_jsx(LinearDocView, { doc: doc, basePath: basePath, viewport: activeViewport, theme: activeTheme })) : (_jsx(DocPlayer, { script: previewDoc, basePath: basePath, showControls: true, muted: true, forceViewport: activeViewport, displayMode: activeDisplayMode, theme: activeTheme, captionStyle: activeCaptionStyle })) }) }));
384
368
  }
385
369
  //# sourceMappingURL=PreviewPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewPanel.js","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PreviewPanel.js","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"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"}
package/dist/Toolbar.d.ts CHANGED
@@ -6,6 +6,7 @@
6
6
  * In Raw mode, appends markdown syntax at the cursor (or end of source).
7
7
  * Hidden in Preview mode.
8
8
  */
9
+ import type { ReactNode } from 'react';
9
10
  export interface ToolbarProps {
10
11
  /** Additional class name */
11
12
  className?: string;
@@ -13,11 +14,17 @@ export interface ToolbarProps {
13
14
  showFiles?: boolean;
14
15
  /** Toggle the Files panel. When provided, a "Files" button appears in the toolbar. */
15
16
  onToggleFiles?: () => void;
17
+ /** Content rendered at the left edge of the toolbar, before the view tabs. */
18
+ slotLeft?: ReactNode;
19
+ /** Content rendered after the formatting controls (in the middle area). */
20
+ slotAfterActions?: ReactNode;
21
+ /** Content rendered at the rightmost end of the toolbar, after all other elements. */
22
+ slotRight?: ReactNode;
16
23
  }
17
24
  /**
18
25
  * Formatting toolbar.
19
26
  * - WYSIWYG: calls Tiptap chain commands (toggleBold, etc.)
20
27
  * - Raw: appends markdown syntax to the source
21
28
  */
22
- export declare function Toolbar({ className, showFiles, onToggleFiles }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
29
+ export declare function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAfterActions, slotRight, }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
23
30
  //# sourceMappingURL=Toolbar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAuFD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,YAAY,2CAkX5E"}
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAYvC,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAuFD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,SAAS,GACV,EAAE,YAAY,2CAqXd"}
package/dist/Toolbar.js CHANGED
@@ -1,19 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- /**
3
- * Toolbar
4
- *
5
- * Formatting toolbar that provides common markdown editing actions.
6
- * In WYSIWYG mode, uses Tiptap's chain commands to toggle marks / set nodes.
7
- * In Raw mode, appends markdown syntax at the cursor (or end of source).
8
- * Hidden in Preview mode.
9
- */
10
2
  import { useCallback, useEffect, useReducer } from 'react';
11
3
  import { useEditorContext } from './EditorContext';
12
4
  import { getAvailableTemplates } from '@bendyline/squisq/doc';
13
5
  const VIEWS = [
14
6
  { id: 'wysiwyg', label: 'Editor', shortcut: '⌘1' },
15
7
  { id: 'raw', label: 'Raw', shortcut: '⌘2' },
16
- { id: 'preview', label: 'Preview', shortcut: '⌘3' },
8
+ { id: 'preview', label: 'Play', shortcut: '⌘3' },
17
9
  ];
18
10
  const BUTTONS = [
19
11
  // Format group
@@ -91,7 +83,7 @@ function isTiptapActive(editor, id) {
91
83
  * - WYSIWYG: calls Tiptap chain commands (toggleBold, etc.)
92
84
  * - Raw: appends markdown syntax to the source
93
85
  */
94
- export function Toolbar({ className, showFiles, onToggleFiles }) {
86
+ export function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAfterActions, slotRight, }) {
95
87
  const { activeView, setActiveView, markdownSource, setMarkdownSource, tiptapEditor, monacoEditor, } = useEditorContext();
96
88
  // Force re-render when Tiptap selection or formatting state changes
97
89
  const [, forceUpdate] = useReducer((c) => c + 1, 0);
@@ -342,9 +334,9 @@ export function Toolbar({ className, showFiles, onToggleFiles }) {
342
334
  }
343
335
  };
344
336
  const templateNames = getAvailableTemplates();
345
- return (_jsxs("div", { className: `squisq-toolbar ${className || ''}`, role: "toolbar", "aria-label": "Formatting toolbar", children: [_jsx("div", { className: "squisq-toolbar-view-tabs", role: "tablist", "aria-label": "Editor view", children: VIEWS.map((view) => (_jsx("button", { role: "tab", "data-view": view.id, "aria-selected": activeView === view.id, className: `squisq-toolbar-view-tab${activeView === view.id ? ' squisq-toolbar-view-tab--active' : ''}`, onClick: () => setActiveView(view.id), title: `${view.label} (${view.shortcut})`, children: view.label }, view.id))) }), !isPreview && (_jsxs("div", { className: "squisq-toolbar-actions", children: [groups.map((group, gi) => (_jsxs("div", { className: "squisq-toolbar-group", children: [gi > 0 && _jsx("div", { className: "squisq-toolbar-separator" }), BUTTONS.filter((b) => b.group === group).map((btn) => {
337
+ return (_jsxs("div", { className: `squisq-toolbar ${className || ''}`, role: "toolbar", "aria-label": "Formatting toolbar", children: [slotLeft, _jsx("div", { className: "squisq-toolbar-view-tabs", role: "tablist", "aria-label": "Editor view", children: VIEWS.map((view) => (_jsx("button", { role: "tab", "data-view": view.id, "aria-selected": activeView === view.id, className: `squisq-toolbar-view-tab${activeView === view.id ? ' squisq-toolbar-view-tab--active' : ''}`, onClick: () => setActiveView(view.id), title: `${view.label} (${view.shortcut})`, children: view.label }, view.id))) }), !isPreview && (_jsxs("div", { className: "squisq-toolbar-actions", children: [groups.map((group, gi) => (_jsxs("div", { className: "squisq-toolbar-group", children: [gi > 0 && _jsx("div", { className: "squisq-toolbar-separator" }), BUTTONS.filter((b) => b.group === group).map((btn) => {
346
338
  const active = isWysiwyg ? isTiptapActive(tiptapEditor, btn.id) : false;
347
339
  return (_jsx("button", { className: `squisq-toolbar-button${active ? ' squisq-toolbar-button--active' : ''}`, title: btn.title, onClick: () => handleAction(btn.id), "aria-label": btn.title, "aria-pressed": active, style: btn.iconStyle, children: btn.icon }, btn.id));
348
- })] }, group))), currentTemplate !== null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "squisq-toolbar-separator" }), _jsx("div", { className: "squisq-toolbar-group squisq-template-picker", children: _jsxs("label", { className: "squisq-template-picker-label", title: "Block template for this heading", children: ["Template:", _jsxs("select", { className: "squisq-template-picker-select", value: currentTemplate, onChange: (e) => handleTemplatePick(e.target.value), children: [_jsx("option", { value: "", children: "\u2014 none \u2014" }), templateNames.map((name) => (_jsx("option", { value: name, children: name }, name)))] })] }) })] }))] })), onToggleFiles && _jsx("div", { style: { flex: 1 } }), onToggleFiles && (_jsx("button", { className: `squisq-toolbar-button squisq-toolbar-files-toggle${showFiles ? ' squisq-toolbar-button--active' : ''}`, onClick: onToggleFiles, title: showFiles ? 'Hide Files panel' : 'Show Files panel', "aria-pressed": showFiles, "aria-label": "Toggle Files panel", children: '\u{1F4CE}' }))] }));
340
+ })] }, group))), currentTemplate !== null && (_jsxs(_Fragment, { children: [_jsx("div", { className: "squisq-toolbar-separator" }), _jsx("div", { className: "squisq-toolbar-group squisq-template-picker", children: _jsxs("label", { className: "squisq-template-picker-label", title: "Block template for this heading", children: ["Template:", _jsxs("select", { className: "squisq-template-picker-select", value: currentTemplate, onChange: (e) => handleTemplatePick(e.target.value), children: [_jsx("option", { value: "", children: "\u2014 none \u2014" }), templateNames.map((name) => (_jsx("option", { value: name, children: name }, name)))] })] }) })] }))] })), slotAfterActions, _jsx("div", { style: { flex: 1 } }), onToggleFiles && (_jsx("button", { className: `squisq-toolbar-button squisq-toolbar-files-toggle${showFiles ? ' squisq-toolbar-button--active' : ''}`, onClick: onToggleFiles, title: showFiles ? 'Hide Files panel' : 'Show Files panel', "aria-pressed": showFiles, "aria-label": "Toggle Files panel", children: '\u{1F4CE}' })), slotRight] }));
349
341
  }
350
342
  //# sourceMappingURL=Toolbar.js.map