@bendyline/squisq-editor-react 1.0.0 → 1.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.
Files changed (70) hide show
  1. package/dist/DropZoneOverlay.d.ts +24 -0
  2. package/dist/DropZoneOverlay.d.ts.map +1 -0
  3. package/dist/DropZoneOverlay.js +53 -0
  4. package/dist/DropZoneOverlay.js.map +1 -0
  5. package/dist/EditorContext.d.ts +79 -0
  6. package/dist/EditorContext.d.ts.map +1 -0
  7. package/dist/EditorContext.js +204 -0
  8. package/dist/EditorContext.js.map +1 -0
  9. package/dist/EditorShell.d.ts +39 -0
  10. package/dist/EditorShell.d.ts.map +1 -0
  11. package/dist/EditorShell.js +104 -0
  12. package/dist/EditorShell.js.map +1 -0
  13. package/dist/MediaBin.d.ts +18 -0
  14. package/dist/MediaBin.d.ts.map +1 -0
  15. package/dist/MediaBin.js +141 -0
  16. package/dist/MediaBin.js.map +1 -0
  17. package/dist/PreviewPanel.d.ts +33 -0
  18. package/dist/PreviewPanel.d.ts.map +1 -0
  19. package/dist/PreviewPanel.js +385 -0
  20. package/dist/PreviewPanel.js.map +1 -0
  21. package/dist/RawEditor.d.ts +25 -0
  22. package/dist/RawEditor.d.ts.map +1 -0
  23. package/dist/RawEditor.js +100 -0
  24. package/dist/RawEditor.js.map +1 -0
  25. package/dist/StatusBar.d.ts +15 -0
  26. package/dist/StatusBar.d.ts.map +1 -0
  27. package/dist/StatusBar.js +24 -0
  28. package/dist/StatusBar.js.map +1 -0
  29. package/dist/TemplateAnnotation.d.ts +20 -0
  30. package/dist/TemplateAnnotation.d.ts.map +1 -0
  31. package/dist/TemplateAnnotation.js +69 -0
  32. package/dist/TemplateAnnotation.js.map +1 -0
  33. package/dist/Toolbar.d.ts +23 -0
  34. package/dist/Toolbar.d.ts.map +1 -0
  35. package/dist/Toolbar.js +350 -0
  36. package/dist/Toolbar.js.map +1 -0
  37. package/dist/ViewSwitcher.d.ts +14 -0
  38. package/dist/ViewSwitcher.d.ts.map +1 -0
  39. package/dist/ViewSwitcher.js +20 -0
  40. package/dist/ViewSwitcher.js.map +1 -0
  41. package/dist/WysiwygEditor.d.ts +28 -0
  42. package/dist/WysiwygEditor.d.ts.map +1 -0
  43. package/dist/WysiwygEditor.js +111 -0
  44. package/dist/WysiwygEditor.js.map +1 -0
  45. package/dist/hooks/useFileDrop.d.ts +41 -0
  46. package/dist/hooks/useFileDrop.d.ts.map +1 -0
  47. package/dist/hooks/useFileDrop.js +167 -0
  48. package/dist/hooks/useFileDrop.js.map +1 -0
  49. package/dist/index.d.ts +43 -268
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +39 -3832
  52. package/dist/index.js.map +1 -1
  53. package/dist/tiptapBridge.d.ts +24 -0
  54. package/dist/tiptapBridge.d.ts.map +1 -0
  55. package/dist/tiptapBridge.js +358 -0
  56. package/dist/tiptapBridge.js.map +1 -0
  57. package/dist/utils/dropUtils.d.ts +36 -0
  58. package/dist/utils/dropUtils.d.ts.map +1 -0
  59. package/dist/utils/dropUtils.js +71 -0
  60. package/dist/utils/dropUtils.js.map +1 -0
  61. package/package.json +5 -5
  62. package/src/DropZoneOverlay.tsx +137 -0
  63. package/src/EditorContext.tsx +56 -0
  64. package/src/EditorShell.tsx +102 -8
  65. package/src/MediaBin.tsx +223 -0
  66. package/src/Toolbar.tsx +21 -1
  67. package/src/hooks/useFileDrop.ts +226 -0
  68. package/src/index.ts +23 -0
  69. package/src/styles/editor.css +318 -0
  70. package/src/utils/dropUtils.ts +88 -0
@@ -0,0 +1,141 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * MediaBin
4
+ *
5
+ * Toggleable side panel that displays files associated with the current
6
+ * content. Shows image thumbnails, icons for other types, file sizes,
7
+ * and provides an upload button to add new media.
8
+ */
9
+ import { useState, useEffect, useRef, useCallback } from 'react';
10
+ // ============================================
11
+ // Helpers
12
+ // ============================================
13
+ function formatSize(bytes) {
14
+ if (bytes < 1024)
15
+ return `${bytes} B`;
16
+ if (bytes < 1024 * 1024)
17
+ return `${(bytes / 1024).toFixed(1)} KB`;
18
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
19
+ }
20
+ function iconForMime(mimeType) {
21
+ if (mimeType.startsWith('image/'))
22
+ return '\u{1F5BC}';
23
+ if (mimeType.startsWith('audio/'))
24
+ return '\u{1F50A}';
25
+ if (mimeType.startsWith('video/'))
26
+ return '\u{1F3AC}';
27
+ if (mimeType.includes('json'))
28
+ return '{ }';
29
+ if (mimeType.includes('xml') || mimeType.includes('ssml'))
30
+ return '\u{2329}/\u{232A}';
31
+ return '\u{1F4C4}';
32
+ }
33
+ function isImageMime(mimeType) {
34
+ return mimeType.startsWith('image/');
35
+ }
36
+ // ============================================
37
+ // Component
38
+ // ============================================
39
+ export function MediaBin({ mediaProvider, isDark, refreshKey }) {
40
+ const [entries, setEntries] = useState([]);
41
+ const [thumbUrls, setThumbUrls] = useState({});
42
+ const [loading, setLoading] = useState(false);
43
+ const fileInputRef = useRef(null);
44
+ // Scan media entries whenever the provider changes or refreshKey bumps
45
+ useEffect(() => {
46
+ if (!mediaProvider) {
47
+ setEntries([]);
48
+ setThumbUrls({});
49
+ return;
50
+ }
51
+ let cancelled = false;
52
+ async function scan() {
53
+ setLoading(true);
54
+ try {
55
+ const list = await mediaProvider.listMedia();
56
+ if (cancelled)
57
+ return;
58
+ list.sort((a, b) => {
59
+ const aImg = isImageMime(a.mimeType) ? 0 : 1;
60
+ const bImg = isImageMime(b.mimeType) ? 0 : 1;
61
+ if (aImg !== bImg)
62
+ return aImg - bImg;
63
+ return a.name.localeCompare(b.name);
64
+ });
65
+ setEntries(list);
66
+ const urls = {};
67
+ for (const entry of list) {
68
+ if (isImageMime(entry.mimeType)) {
69
+ try {
70
+ urls[entry.name] = await mediaProvider.resolveUrl(entry.name);
71
+ }
72
+ catch {
73
+ // skip failed resolve
74
+ }
75
+ }
76
+ }
77
+ if (!cancelled)
78
+ setThumbUrls(urls);
79
+ }
80
+ finally {
81
+ if (!cancelled)
82
+ setLoading(false);
83
+ }
84
+ }
85
+ scan();
86
+ return () => {
87
+ cancelled = true;
88
+ };
89
+ }, [mediaProvider, refreshKey]);
90
+ // ---- Upload ----
91
+ const handleUploadClick = useCallback(() => {
92
+ fileInputRef.current?.click();
93
+ }, []);
94
+ const handleFileChange = useCallback(async (e) => {
95
+ const files = e.target.files;
96
+ if (!files || !mediaProvider)
97
+ return;
98
+ setLoading(true);
99
+ try {
100
+ for (let i = 0; i < files.length; i++) {
101
+ const file = files[i];
102
+ const buffer = await file.arrayBuffer();
103
+ const mimeType = file.type || 'application/octet-stream';
104
+ await mediaProvider.addMedia(file.name, buffer, mimeType);
105
+ }
106
+ // Re-scan
107
+ const list = await mediaProvider.listMedia();
108
+ list.sort((a, b) => {
109
+ const aImg = isImageMime(a.mimeType) ? 0 : 1;
110
+ const bImg = isImageMime(b.mimeType) ? 0 : 1;
111
+ if (aImg !== bImg)
112
+ return aImg - bImg;
113
+ return a.name.localeCompare(b.name);
114
+ });
115
+ setEntries(list);
116
+ const urls = {};
117
+ for (const entry of list) {
118
+ if (isImageMime(entry.mimeType)) {
119
+ try {
120
+ urls[entry.name] = await mediaProvider.resolveUrl(entry.name);
121
+ }
122
+ catch {
123
+ // skip
124
+ }
125
+ }
126
+ }
127
+ setThumbUrls(urls);
128
+ }
129
+ finally {
130
+ setLoading(false);
131
+ if (fileInputRef.current)
132
+ fileInputRef.current.value = '';
133
+ }
134
+ }, [mediaProvider]);
135
+ return (_jsxs("div", { className: `squisq-media-bin${isDark ? ' squisq-media-bin--dark' : ''}`, children: [_jsxs("div", { className: "squisq-media-bin-header", children: [_jsxs("span", { className: "squisq-media-bin-title", children: ["Files ", entries.length > 0 && `(${entries.length})`] }), _jsx("button", { className: "squisq-media-bin-upload", onClick: handleUploadClick, disabled: !mediaProvider || loading, title: mediaProvider ? 'Upload files' : 'Load a content zip or select a storage slot first', children: "+ Upload" })] }), _jsxs("div", { className: "squisq-media-bin-list", children: [!mediaProvider && (_jsxs("div", { className: "squisq-media-bin-empty", children: ["No media context.", _jsx("br", {}), "Load a content zip or select a storage slot."] })), mediaProvider && entries.length === 0 && !loading && (_jsx("div", { className: "squisq-media-bin-empty", children: "No files yet." })), entries.map((entry) => {
136
+ const thumb = thumbUrls[entry.name];
137
+ const basename = entry.name.includes('/') ? entry.name.split('/').pop() : entry.name;
138
+ return (_jsxs("div", { className: "squisq-media-bin-item", title: `${entry.name}\n${entry.mimeType}\n${formatSize(entry.size)}`, children: [thumb ? (_jsx("img", { src: thumb, alt: basename, className: "squisq-media-bin-thumb" })) : (_jsx("span", { className: "squisq-media-bin-icon", children: iconForMime(entry.mimeType) })), _jsxs("div", { className: "squisq-media-bin-meta", children: [_jsx("div", { className: "squisq-media-bin-name", children: basename }), _jsx("div", { className: "squisq-media-bin-size", children: formatSize(entry.size) })] })] }, entry.name));
139
+ })] }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, style: { display: 'none' }, onChange: handleFileChange })] }));
140
+ }
141
+ //# sourceMappingURL=MediaBin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaBin.js","sourceRoot":"","sources":["../src/MediaBin.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * PreviewPanel
3
+ *
4
+ * Renders a live preview of the current markdown document as a slideshow
5
+ * using the DocPlayer component from @bendyline/squisq-react.
6
+ *
7
+ * The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
8
+ * with template names, heading text, and body content — but no audio or
9
+ * visual layers. This component bridges the gap by:
10
+ *
11
+ * 1. Flattening the block tree into a linear slide sequence
12
+ * 2. Converting each block into a TemplateBlock-compatible object
13
+ * (mapping heading text → title, templateOverrides → template fields)
14
+ * 3. Synthesizing a dummy audio segment so DocPlayer's timing works
15
+ * (the player enters fallback-timer mode when audio can't load)
16
+ * 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
17
+ */
18
+ export interface PreviewPanelProps {
19
+ /** Base path for resolving media URLs in DocPlayer */
20
+ basePath?: string;
21
+ /** Additional class name for the container */
22
+ className?: string;
23
+ }
24
+ /**
25
+ * Live preview panel that renders the current document as a slideshow.
26
+ * Uses DocPlayer from @bendyline/squisq-react for SVG block rendering
27
+ * with template expansion, transitions, and playback controls.
28
+ *
29
+ * Includes a viewport format dropdown above the player. The default
30
+ * format can be hinted via YAML frontmatter `document-render-as:`.
31
+ */
32
+ export declare function PreviewPanel({ basePath, className }: PreviewPanelProps): import("react/jsx-runtime").JSX.Element;
33
+ //# sourceMappingURL=PreviewPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+OD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAuR5E"}
@@ -0,0 +1,385 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * PreviewPanel
4
+ *
5
+ * Renders a live preview of the current markdown document as a slideshow
6
+ * using the DocPlayer component from @bendyline/squisq-react.
7
+ *
8
+ * The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
9
+ * with template names, heading text, and body content — but no audio or
10
+ * visual layers. This component bridges the gap by:
11
+ *
12
+ * 1. Flattening the block tree into a linear slide sequence
13
+ * 2. Converting each block into a TemplateBlock-compatible object
14
+ * (mapping heading text → title, templateOverrides → template fields)
15
+ * 3. Synthesizing a dummy audio segment so DocPlayer's timing works
16
+ * (the player enters fallback-timer mode when audio can't load)
17
+ * 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
18
+ */
19
+ import { useMemo, useState, useEffect } from 'react';
20
+ import { DocPlayer, LinearDocView } from '@bendyline/squisq-react';
21
+ import { flattenBlocks } from '@bendyline/squisq/doc';
22
+ import { hasTemplate } from '@bendyline/squisq/doc';
23
+ import { extractPlainText } from '@bendyline/squisq/markdown';
24
+ import { VIEWPORT_PRESETS } from '@bendyline/squisq/schemas';
25
+ import { getThemeSummaries, resolveTheme } from '@bendyline/squisq/schemas';
26
+ import { useEditorContext } from './EditorContext';
27
+ // ── Helpers ────────────────────────────────────────────────────────
28
+ /**
29
+ * Extract plain text from an array of markdown block nodes.
30
+ * Walks paragraphs, blockquotes, and list items to collect all text.
31
+ */
32
+ function extractBodyText(contents) {
33
+ if (!contents || contents.length === 0)
34
+ return '';
35
+ const parts = [];
36
+ for (const node of contents) {
37
+ parts.push(extractPlainText(node));
38
+ }
39
+ return parts.join('\n').trim();
40
+ }
41
+ /**
42
+ * Extract list items from markdown body content.
43
+ * Returns an array of plain text strings for each list item found.
44
+ */
45
+ function extractListItems(contents) {
46
+ if (!contents)
47
+ return [];
48
+ const items = [];
49
+ for (const node of contents) {
50
+ if (node.type === 'list') {
51
+ for (const item of node.children) {
52
+ const text = extractPlainText(item).trim();
53
+ if (text)
54
+ items.push(text);
55
+ }
56
+ }
57
+ }
58
+ return items;
59
+ }
60
+ /**
61
+ * Provide sensible default fields for templates that require more than
62
+ * just a `title`. This prevents crashes from undefined required fields
63
+ * when the markdown annotations don't supply all template-specific values.
64
+ */
65
+ function getTemplateDefaults(templateName, headingText, block) {
66
+ const body = extractBodyText(block.contents);
67
+ switch (templateName) {
68
+ case 'statHighlight':
69
+ return {
70
+ stat: headingText,
71
+ description: body || headingText,
72
+ };
73
+ case 'quoteBlock':
74
+ case 'fullBleedQuote':
75
+ case 'pullQuote':
76
+ return {
77
+ quote: body || headingText,
78
+ };
79
+ case 'factCard':
80
+ return {
81
+ fact: headingText,
82
+ explanation: body || headingText,
83
+ };
84
+ case 'comparisonBar':
85
+ return {
86
+ leftLabel: 'A',
87
+ leftValue: 60,
88
+ rightLabel: 'B',
89
+ rightValue: 40,
90
+ };
91
+ case 'listBlock':
92
+ return {
93
+ items: extractListItems(block.contents) || ['Item 1', 'Item 2', 'Item 3'],
94
+ };
95
+ case 'definitionCard':
96
+ return {
97
+ term: headingText,
98
+ definition: body || headingText,
99
+ };
100
+ case 'dateEvent':
101
+ return {
102
+ date: headingText,
103
+ description: body || headingText,
104
+ };
105
+ default:
106
+ return {};
107
+ }
108
+ }
109
+ /**
110
+ * Convert a markdown-derived Block into a TemplateBlock-compatible object.
111
+ *
112
+ * The block's heading text becomes `title` (works for sectionHeader,
113
+ * titleBlock, factCard, etc.). Any templateOverrides from annotation
114
+ * syntax `{[template key=value]}` are spread on top so template-specific
115
+ * fields (stat, quote, description, …) are available.
116
+ *
117
+ * If the requested template doesn't exist in the registry, falls back
118
+ * to `sectionHeader` to avoid "Unknown template" warnings.
119
+ */
120
+ function blockToSlide(block, index) {
121
+ const headingText = block.sourceHeading
122
+ ? extractPlainText(block.sourceHeading)
123
+ : block.id || `Slide ${index + 1}`;
124
+ // Validate template name — fall back to sectionHeader for unknowns
125
+ const requestedTemplate = block.template || 'sectionHeader';
126
+ const template = hasTemplate(requestedTemplate) ? requestedTemplate : 'sectionHeader';
127
+ // Get sensible defaults for templates that need more than just `title`
128
+ const defaults = getTemplateDefaults(template, headingText, block);
129
+ return {
130
+ id: block.id,
131
+ template,
132
+ duration: block.duration,
133
+ audioSegment: 0,
134
+ transition: index > 0 ? { type: 'fade', duration: 0.5 } : undefined,
135
+ // Provide heading text as title — consumed by sectionHeader, titleBlock, etc.
136
+ title: headingText,
137
+ // Template-specific defaults (safe fallbacks for required fields)
138
+ ...defaults,
139
+ // Spread annotation overrides last so explicit values win
140
+ ...block.templateOverrides,
141
+ };
142
+ }
143
+ /**
144
+ * Build a player-ready Doc from the markdown-derived Doc.
145
+ *
146
+ * Flattens hierarchical blocks, converts each to a TemplateBlock-compatible
147
+ * slide, recalculates timing, and adds a synthetic audio segment.
148
+ */
149
+ function buildPreviewDoc(doc) {
150
+ const flat = flattenBlocks(doc.blocks);
151
+ const slides = flat.map(blockToSlide);
152
+ // Recalculate sequential timing
153
+ let t = 0;
154
+ for (const slide of slides) {
155
+ slide.startTime = t;
156
+ t += slide.duration;
157
+ }
158
+ return {
159
+ articleId: doc.articleId,
160
+ duration: t,
161
+ blocks: slides,
162
+ audio: {
163
+ // Synthetic segment — audio will fail to load and DocPlayer will use
164
+ // its fallback timer to advance currentTime via requestAnimationFrame.
165
+ segments: t > 0 ? [{ src: '', name: 'preview', duration: t, startTime: 0 }] : [],
166
+ },
167
+ };
168
+ }
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
+ // ── Component ──────────────────────────────────────────────────────
243
+ /**
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:`.
250
+ */
251
+ export function PreviewPanel({ basePath = '/', className }) {
252
+ 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
278
+ 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]);
305
+ // Status overlays for non-ready states
306
+ if (isParsing) {
307
+ return (_jsx("div", { className: `squisq-preview-status ${className || ''}`, "data-testid": "preview-panel", children: _jsx("p", { children: "Parsing\u2026" }) }));
308
+ }
309
+ if (parseError) {
310
+ return (_jsxs("div", { className: `squisq-preview-status ${className || ''}`, "data-testid": "preview-panel", children: [_jsx("h3", { children: "Parse Error" }), _jsx("pre", { children: parseError })] }));
311
+ }
312
+ if (!previewDoc) {
313
+ 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
+ }
315
+ return (_jsxs("div", { className: `squisq-preview-container ${className || ''}`, "data-testid": "preview-panel", style: {
316
+ width: '100%',
317
+ height: '100%',
318
+ display: 'flex',
319
+ flexDirection: 'column',
320
+ overflow: 'hidden',
321
+ 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 })) })] }));
384
+ }
385
+ //# sourceMappingURL=PreviewPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreviewPanel.js","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * RawEditor
3
+ *
4
+ * Monaco-based raw markdown editor. Provides full VS Code-like editing
5
+ * experience with syntax highlighting, minimap, and bracket matching.
6
+ * Syncs changes back to EditorContext on every keystroke (debounced).
7
+ */
8
+ export interface RawEditorProps {
9
+ /** Monaco editor theme (default: 'vs-dark') */
10
+ theme?: string;
11
+ /** Show minimap (default: false) */
12
+ minimap?: boolean;
13
+ /** Font size in pixels (default: 14) */
14
+ fontSize?: number;
15
+ /** Word wrap setting (default: 'on') */
16
+ wordWrap?: 'on' | 'off' | 'wordWrapColumn' | 'bounded';
17
+ /** Additional class name for the container */
18
+ className?: string;
19
+ }
20
+ /**
21
+ * Raw markdown editor using Monaco Editor.
22
+ * Binds to the shared EditorContext for source synchronization.
23
+ */
24
+ export declare function RawEditor({ theme, minimap, fontSize, wordWrap, className, }: RawEditorProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=RawEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvD,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAY,EACZ,OAAe,EACf,QAAa,EACb,QAAe,EACf,SAAS,GACV,EAAE,cAAc,2CA8GhB"}