@bendyline/squisq-editor-react 1.1.0 → 1.2.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/dist/EditorContext.d.ts +6 -2
- package/dist/EditorContext.d.ts.map +1 -1
- package/dist/EditorContext.js +3 -1
- package/dist/EditorContext.js.map +1 -1
- package/dist/EditorShell.d.ts +11 -1
- package/dist/EditorShell.d.ts.map +1 -1
- package/dist/EditorShell.js +9 -7
- package/dist/EditorShell.js.map +1 -1
- package/dist/ImageNodeView.d.ts +15 -0
- package/dist/ImageNodeView.d.ts.map +1 -0
- package/dist/ImageNodeView.js +52 -0
- package/dist/ImageNodeView.js.map +1 -0
- package/dist/PreviewControls.d.ts +41 -0
- package/dist/PreviewControls.d.ts.map +1 -0
- package/dist/PreviewControls.js +201 -0
- package/dist/PreviewControls.js.map +1 -0
- package/dist/PreviewPanel.d.ts +7 -7
- package/dist/PreviewPanel.d.ts.map +1 -1
- package/dist/PreviewPanel.js +183 -199
- package/dist/PreviewPanel.js.map +1 -1
- package/dist/Toolbar.d.ts +8 -1
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +145 -20
- package/dist/Toolbar.js.map +1 -1
- package/dist/WysiwygEditor.d.ts.map +1 -1
- package/dist/WysiwygEditor.js +3 -1
- package/dist/WysiwygEditor.js.map +1 -1
- package/dist/__tests__/tiptapBridge.test.d.ts +2 -0
- package/dist/__tests__/tiptapBridge.test.d.ts.map +1 -0
- package/dist/__tests__/tiptapBridge.test.js +241 -0
- package/dist/__tests__/tiptapBridge.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tiptapBridge.d.ts.map +1 -1
- package/dist/tiptapBridge.js +146 -5
- package/dist/tiptapBridge.js.map +1 -1
- package/package.json +5 -4
- package/src/EditorContext.tsx +8 -1
- package/src/EditorShell.tsx +71 -32
- package/src/ImageNodeView.tsx +70 -0
- package/src/PreviewControls.tsx +340 -0
- package/src/PreviewPanel.tsx +216 -287
- package/src/Toolbar.tsx +449 -17
- package/src/WysiwygEditor.tsx +3 -1
- package/src/__tests__/tiptapBridge.test.ts +290 -0
- package/src/index.ts +6 -0
- package/src/styles/editor.css +257 -16
- package/src/tiptapBridge.ts +164 -6
package/dist/EditorContext.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* and Doc so all views stay in sync.
|
|
8
8
|
*/
|
|
9
9
|
import { type ReactNode } from 'react';
|
|
10
|
-
import type { Doc } from '@bendyline/squisq/schemas';
|
|
10
|
+
import type { Doc, MediaProvider } from '@bendyline/squisq/schemas';
|
|
11
11
|
import type { MarkdownDocument } from '@bendyline/squisq/markdown';
|
|
12
12
|
import type { Editor as TiptapEditor } from '@tiptap/core';
|
|
13
13
|
import type { editor as MonacoEditorNs } from 'monaco-editor';
|
|
@@ -54,6 +54,8 @@ export interface EditorContextValue extends EditorState, EditorActions {
|
|
|
54
54
|
tiptapEditor: TiptapEditor | null;
|
|
55
55
|
/** The live Monaco editor instance (null when Raw is not mounted) */
|
|
56
56
|
monacoEditor: MonacoEditor | null;
|
|
57
|
+
/** MediaProvider for resolving image URLs in the WYSIWYG editor */
|
|
58
|
+
mediaProvider: MediaProvider | null;
|
|
57
59
|
}
|
|
58
60
|
/**
|
|
59
61
|
* Hook to access the editor context. Must be used within an EditorProvider.
|
|
@@ -68,12 +70,14 @@ export interface EditorProviderProps {
|
|
|
68
70
|
articleId?: string;
|
|
69
71
|
/** Color theme */
|
|
70
72
|
theme?: EditorTheme;
|
|
73
|
+
/** MediaProvider for resolving image URLs */
|
|
74
|
+
mediaProvider?: MediaProvider | null;
|
|
71
75
|
children: ReactNode;
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
74
78
|
* Provides shared editor state to all child components.
|
|
75
79
|
* Automatically parses markdown and generates a Doc whenever the source changes.
|
|
76
80
|
*/
|
|
77
|
-
export declare function EditorProvider({ initialMarkdown, initialView, articleId, theme: initialTheme, children, }: EditorProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
export declare function EditorProvider({ initialMarkdown, initialView, articleId, theme: initialTheme, mediaProvider, children, }: EditorProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
78
82
|
export {};
|
|
79
83
|
//# sourceMappingURL=EditorContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorContext.d.ts","sourceRoot":"","sources":["../src/EditorContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorContext.d.ts","sourceRoot":"","sources":["../src/EditorContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,eAAe,CAAC;AAG9D,kDAAkD;AAClD,KAAK,YAAY,GAAG,cAAc,CAAC,qBAAqB,CAAC;AAIzD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,sCAAsC;IACtC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,mCAAmC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iCAAiC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,+DAA+D;IAC/D,cAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD,6BAA6B;IAC7B,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,iFAAiF;IACjF,eAAe,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,6EAA6E;IAC7E,eAAe,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,sEAAsE;IACtE,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,qDAAqD;IACrD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW,EAAE,aAAa;IACpE,yEAAyE;IACzE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,qEAAqE;IACrE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC;AAMD;;GAEG;AAEH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAMrD;AAID,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,eAAoB,EACpB,WAAmB,EACnB,SAAsB,EACtB,KAAK,EAAE,YAAsB,EAC7B,aAAoB,EACpB,QAAQ,GACT,EAAE,mBAAmB,2CA8LrB"}
|
package/dist/EditorContext.js
CHANGED
|
@@ -28,7 +28,7 @@ export function useEditorContext() {
|
|
|
28
28
|
* Provides shared editor state to all child components.
|
|
29
29
|
* Automatically parses markdown and generates a Doc whenever the source changes.
|
|
30
30
|
*/
|
|
31
|
-
export function EditorProvider({ initialMarkdown = '', initialView = 'raw', articleId = 'untitled', theme: initialTheme = 'light', children, }) {
|
|
31
|
+
export function EditorProvider({ initialMarkdown = '', initialView = 'raw', articleId = 'untitled', theme: initialTheme = 'light', mediaProvider = null, children, }) {
|
|
32
32
|
const [markdownSource, setMarkdownSourceRaw] = useState(initialMarkdown);
|
|
33
33
|
const [markdownDoc, setMarkdownDocState] = useState(null);
|
|
34
34
|
const [doc, setDoc] = useState(null);
|
|
@@ -172,6 +172,7 @@ export function EditorProvider({ initialMarkdown = '', initialView = 'raw', arti
|
|
|
172
172
|
theme,
|
|
173
173
|
tiptapEditor,
|
|
174
174
|
monacoEditor,
|
|
175
|
+
mediaProvider,
|
|
175
176
|
setMarkdownSource,
|
|
176
177
|
setMarkdownDoc,
|
|
177
178
|
setActiveView,
|
|
@@ -190,6 +191,7 @@ export function EditorProvider({ initialMarkdown = '', initialView = 'raw', arti
|
|
|
190
191
|
theme,
|
|
191
192
|
tiptapEditor,
|
|
192
193
|
monacoEditor,
|
|
194
|
+
mediaProvider,
|
|
193
195
|
setMarkdownSource,
|
|
194
196
|
setMarkdownDoc,
|
|
195
197
|
setActiveView,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorContext.js","sourceRoot":"","sources":["../src/EditorContext.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,GAEV,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorContext.js","sourceRoot":"","sources":["../src/EditorContext.tsx"],"names":[],"mappings":"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"}
|
package/dist/EditorShell.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type EditorView } from './EditorContext';
|
|
9
9
|
import type { MediaProvider } from '@bendyline/squisq/schemas';
|
|
10
|
+
import type { ContentContainer } from '@bendyline/squisq/storage';
|
|
11
|
+
import type { ReactNode } from 'react';
|
|
10
12
|
export type { EditorTheme } from './EditorContext';
|
|
11
13
|
export interface EditorShellProps {
|
|
12
14
|
/** Initial markdown content */
|
|
@@ -28,12 +30,20 @@ export interface EditorShellProps {
|
|
|
28
30
|
height?: string;
|
|
29
31
|
/** Optional MediaProvider for the Files panel. When set (even to null), a Files toggle appears in the toolbar. */
|
|
30
32
|
mediaProvider?: MediaProvider | null;
|
|
33
|
+
/** Optional ContentContainer for audio mapping (MP3 discovery + timing.json reading). */
|
|
34
|
+
container?: ContentContainer | null;
|
|
31
35
|
/** Show the Files toggle in the toolbar. Defaults to true when mediaProvider is passed. */
|
|
32
36
|
showFilesToggle?: boolean;
|
|
37
|
+
/** Content rendered at the left edge of the toolbar, before the view tabs. */
|
|
38
|
+
toolbarSlotLeft?: ReactNode;
|
|
39
|
+
/** Content rendered after the formatting controls (in the middle area of the toolbar). */
|
|
40
|
+
toolbarSlotAfterActions?: ReactNode;
|
|
41
|
+
/** Content rendered at the rightmost end of the toolbar, after all other elements. */
|
|
42
|
+
toolbarSlotRight?: ReactNode;
|
|
33
43
|
}
|
|
34
44
|
/**
|
|
35
45
|
* Complete markdown editor shell with toolbar, view switcher, and three
|
|
36
46
|
* editing modes: Raw (Monaco), WYSIWYG (Tiptap), and Preview.
|
|
37
47
|
*/
|
|
38
|
-
export declare function EditorShell({ initialMarkdown, initialView, articleId, basePath, onChange, theme, className, height, mediaProvider, showFilesToggle, }: EditorShellProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare function EditorShell({ initialMarkdown, initialView, articleId, basePath, onChange, theme, className, height, mediaProvider, container, showFilesToggle, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, }: EditorShellProps): import("react/jsx-runtime").JSX.Element;
|
|
39
49
|
//# sourceMappingURL=EditorShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorShell.d.ts","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0BAA0B;IAC1B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kHAAkH;IAClH,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,yFAAyF;IACzF,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,2FAA2F;IAC3F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,0FAA0F;IAC1F,uBAAuB,CAAC,EAAE,SAAS,CAAC;IACpC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,eAAoB,EACpB,WAAuB,EACvB,SAAsB,EACtB,QAAc,EACd,QAAQ,EACR,KAAe,EACf,SAAS,EACT,MAAgB,EAChB,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,gBAAgB,GACjB,EAAE,gBAAgB,2CA0BlB"}
|
package/dist/EditorShell.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* EditorShell
|
|
4
4
|
*
|
|
@@ -13,6 +13,7 @@ import { StatusBar } from './StatusBar';
|
|
|
13
13
|
import { RawEditor } from './RawEditor';
|
|
14
14
|
import { WysiwygEditor } from './WysiwygEditor';
|
|
15
15
|
import { PreviewPanel } from './PreviewPanel';
|
|
16
|
+
import { PreviewSettingsProvider, PreviewToolbarControls } from './PreviewControls';
|
|
16
17
|
import { MediaBin } from './MediaBin';
|
|
17
18
|
import { DropZoneOverlay } from './DropZoneOverlay';
|
|
18
19
|
import { useFileDrop } from './hooks/useFileDrop';
|
|
@@ -21,13 +22,14 @@ import { partitionFiles, processMediaFiles, processTextFile, processTextFiles, }
|
|
|
21
22
|
* Complete markdown editor shell with toolbar, view switcher, and three
|
|
22
23
|
* editing modes: Raw (Monaco), WYSIWYG (Tiptap), and Preview.
|
|
23
24
|
*/
|
|
24
|
-
export function EditorShell({ initialMarkdown = '', initialView = 'wysiwyg', articleId = 'untitled', basePath = '/', onChange, theme = 'light', className, height = '100vh', mediaProvider, showFilesToggle, }) {
|
|
25
|
+
export function EditorShell({ initialMarkdown = '', initialView = 'wysiwyg', articleId = 'untitled', basePath = '/', onChange, theme = 'light', className, height = '100vh', mediaProvider, container, showFilesToggle, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, }) {
|
|
25
26
|
// Show the toggle when explicitly opted in, or when mediaProvider prop was passed at all
|
|
26
27
|
const filesToggleEnabled = showFilesToggle ?? mediaProvider !== undefined;
|
|
27
|
-
return (_jsx(EditorProvider, { initialMarkdown: initialMarkdown, initialView: initialView, articleId: articleId, theme: theme, children: _jsx(EditorShellInner, { basePath: basePath, onChange: onChange, className: className, height: height, mediaProvider: mediaProvider ?? null, filesToggleEnabled: filesToggleEnabled }) }));
|
|
28
|
+
return (_jsx(EditorProvider, { initialMarkdown: initialMarkdown, initialView: initialView, articleId: articleId, theme: theme, mediaProvider: mediaProvider, children: _jsx(EditorShellInner, { basePath: basePath, onChange: onChange, className: className, height: height, mediaProvider: mediaProvider ?? null, container: container, filesToggleEnabled: filesToggleEnabled, toolbarSlotLeft: toolbarSlotLeft, toolbarSlotAfterActions: toolbarSlotAfterActions, toolbarSlotRight: toolbarSlotRight }) }));
|
|
28
29
|
}
|
|
29
|
-
function EditorShellInner({ basePath, onChange, className, height, mediaProvider, filesToggleEnabled, }) {
|
|
30
|
-
const { activeView, markdownSource, theme, insertAtCursor, replaceAll } = useEditorContext();
|
|
30
|
+
function EditorShellInner({ basePath, onChange, className, height, mediaProvider, container, filesToggleEnabled, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, }) {
|
|
31
|
+
const { activeView, markdownSource, doc, theme, insertAtCursor, replaceAll } = useEditorContext();
|
|
32
|
+
const isPreview = activeView === 'preview';
|
|
31
33
|
const [showFiles, setShowFiles] = useState(false);
|
|
32
34
|
const [mediaRefreshKey, setMediaRefreshKey] = useState(0);
|
|
33
35
|
const isDark = theme === 'dark';
|
|
@@ -94,11 +96,11 @@ function EditorShellInner({ basePath, onChange, className, height, mediaProvider
|
|
|
94
96
|
window.addEventListener('keydown', handler);
|
|
95
97
|
return () => window.removeEventListener('keydown', handler);
|
|
96
98
|
}, []);
|
|
97
|
-
return (
|
|
99
|
+
return (_jsx("div", { className: `squisq-editor-shell ${className || ''}`, "data-theme": theme, style: {
|
|
98
100
|
display: 'flex',
|
|
99
101
|
flexDirection: 'column',
|
|
100
102
|
height,
|
|
101
103
|
overflow: 'hidden',
|
|
102
|
-
}, ...containerProps, children: [_jsx("div", { className: "squisq-editor-header", children: _jsx(Toolbar, { showFiles: showFiles, onToggleFiles: filesToggleEnabled ? handleToggleFiles : undefined }) }), _jsxs("div", { className: "squisq-editor-content", style: { flex: 1, overflow: 'hidden', position: 'relative', display: 'flex' }, children: [_jsxs("div", { style: { flex: 1, overflow: 'hidden', position: 'relative' }, children: [activeView === 'raw' && _jsx(RawEditor, { theme: theme === 'dark' ? 'vs-dark' : 'vs' }), activeView === 'wysiwyg' && _jsx(WysiwygEditor, {}),
|
|
104
|
+
}, ...containerProps, children: _jsxs(PreviewSettingsProvider, { doc: doc, children: [_jsx("div", { className: "squisq-editor-header", children: _jsx(Toolbar, { showFiles: showFiles, onToggleFiles: filesToggleEnabled ? handleToggleFiles : undefined, slotLeft: toolbarSlotLeft, slotAfterActions: _jsxs(_Fragment, { children: [toolbarSlotAfterActions, isPreview && _jsx(PreviewToolbarControls, {})] }), slotRight: toolbarSlotRight }) }), _jsxs("div", { className: "squisq-editor-content", style: { flex: 1, overflow: 'hidden', position: 'relative', display: 'flex' }, children: [_jsxs("div", { style: { flex: 1, overflow: 'hidden', position: 'relative' }, children: [activeView === 'raw' && _jsx(RawEditor, { theme: theme === 'dark' ? 'vs-dark' : 'vs' }), activeView === 'wysiwyg' && _jsx(WysiwygEditor, {}), isPreview && _jsx(PreviewPanel, { basePath: basePath, container: container })] }), showFiles && (_jsx(MediaBin, { mediaProvider: mediaProvider, isDark: isDark, refreshKey: mediaRefreshKey })), isDragging && (_jsx(DropZoneOverlay, { dragContentType: dragContentType, zoneProps: zoneProps, hasMediaProvider: mediaProvider !== null }))] }), _jsx(StatusBar, {})] }) }));
|
|
103
105
|
}
|
|
104
106
|
//# sourceMappingURL=EditorShell.js.map
|
package/dist/EditorShell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorShell.js","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorShell.js","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAuC3B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,eAAe,GAAG,EAAE,EACpB,WAAW,GAAG,SAAS,EACvB,SAAS,GAAG,UAAU,EACtB,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,SAAS,EACT,MAAM,GAAG,OAAO,EAChB,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,gBAAgB,GACC;IACjB,yFAAyF;IACzF,MAAM,kBAAkB,GAAG,eAAe,IAAI,aAAa,KAAK,SAAS,CAAC;IAE1E,OAAO,CACL,KAAC,cAAc,IACb,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,YAE5B,KAAC,gBAAgB,IACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,IAAI,IAAI,EACpC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,gBAAgB,EAAE,gBAAgB,GAClC,GACa,CAClB,CAAC;AACJ,CAAC;AAeD,SAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,GACM;IACtB,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAClG,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC;IAEhC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oCAAoC;IAEpC,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EAAE,KAAa,EAAE,MAAkB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAE9C,sBAAsB;YACtB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAC9C,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,yDAAyD;gBACzD,IAAI,CAAC,SAAS;oBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,qBAAqB;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,UAAU,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,qCAAqC;oBACrC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC7C,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CACvD,CAAC;IAEF,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAC7E,MAAM,EAAE,cAAc;KACvB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/B,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3B,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;oBACd,KAAK,GAAG;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC5E,MAAM;oBACR,KAAK,GAAG;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC;wBACxE,MAAM;oBACR,KAAK,GAAG;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC5E,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,cACE,SAAS,EAAE,uBAAuB,SAAS,IAAI,EAAE,EAAE,gBACvC,KAAK,EACjB,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,MAAM;YACN,QAAQ,EAAE,QAAQ;SACnB,KACG,cAAc,YAElB,MAAC,uBAAuB,IAAC,GAAG,EAAE,GAAG,aAE/B,cAAK,SAAS,EAAC,sBAAsB,YACnC,KAAC,OAAO,IACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EACjE,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EACd,8BACG,uBAAuB,EACvB,SAAS,IAAI,KAAC,sBAAsB,KAAG,IACvC,EAEL,SAAS,EAAE,gBAAgB,GAC3B,GACE,EAGN,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,aAE7E,eAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,aAC9D,UAAU,KAAK,KAAK,IAAI,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAI,EACjF,UAAU,KAAK,SAAS,IAAI,KAAC,aAAa,KAAG,EAC7C,SAAS,IAAI,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAI,IACpE,EAEL,SAAS,IAAI,CACZ,KAAC,QAAQ,IAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAI,CACxF,EAGA,UAAU,IAAI,CACb,KAAC,eAAe,IACd,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,aAAa,KAAK,IAAI,GACxC,CACH,IACG,EAGN,KAAC,SAAS,KAAG,IACW,GACtB,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageNodeView — Custom Tiptap NodeView for images.
|
|
3
|
+
*
|
|
4
|
+
* Resolves image `src` attributes through the EditorContext's MediaProvider,
|
|
5
|
+
* converting relative paths (e.g. "images/hero.jpg") to displayable blob URLs.
|
|
6
|
+
*
|
|
7
|
+
* The ProseMirror node retains the original relative path so markdown roundtrip
|
|
8
|
+
* is preserved — only the rendered DOM uses the resolved URL.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Image extension with a custom React NodeView that resolves URLs
|
|
12
|
+
* through the EditorContext's MediaProvider.
|
|
13
|
+
*/
|
|
14
|
+
export declare const ImageWithMediaProvider: import("@tiptap/core").Node<import("@tiptap/extension-image").ImageOptions, any>;
|
|
15
|
+
//# sourceMappingURL=ImageNodeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageNodeView.d.ts","sourceRoot":"","sources":["../src/ImageNodeView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqDH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,kFAIjC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ImageNodeView — Custom Tiptap NodeView for images.
|
|
4
|
+
*
|
|
5
|
+
* Resolves image `src` attributes through the EditorContext's MediaProvider,
|
|
6
|
+
* converting relative paths (e.g. "images/hero.jpg") to displayable blob URLs.
|
|
7
|
+
*
|
|
8
|
+
* The ProseMirror node retains the original relative path so markdown roundtrip
|
|
9
|
+
* is preserved — only the rendered DOM uses the resolved URL.
|
|
10
|
+
*/
|
|
11
|
+
import { useEffect, useState } from 'react';
|
|
12
|
+
import { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';
|
|
13
|
+
import Image from '@tiptap/extension-image';
|
|
14
|
+
import { useEditorContext } from './EditorContext';
|
|
15
|
+
function ImageComponent({ node }) {
|
|
16
|
+
const { src, alt, title } = node.attrs;
|
|
17
|
+
const { mediaProvider } = useEditorContext();
|
|
18
|
+
const [resolvedSrc, setResolvedSrc] = useState(src);
|
|
19
|
+
const isRelative = src &&
|
|
20
|
+
!src.startsWith('blob:') &&
|
|
21
|
+
!src.startsWith('http') &&
|
|
22
|
+
!src.startsWith('data:') &&
|
|
23
|
+
!src.startsWith('/');
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!mediaProvider || !isRelative) {
|
|
26
|
+
setResolvedSrc(src);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
let cancelled = false;
|
|
30
|
+
mediaProvider.resolveUrl(src).then((resolved) => {
|
|
31
|
+
if (!cancelled)
|
|
32
|
+
setResolvedSrc(resolved);
|
|
33
|
+
}, () => {
|
|
34
|
+
if (!cancelled)
|
|
35
|
+
setResolvedSrc(src);
|
|
36
|
+
});
|
|
37
|
+
return () => {
|
|
38
|
+
cancelled = true;
|
|
39
|
+
};
|
|
40
|
+
}, [src, mediaProvider, isRelative]);
|
|
41
|
+
return (_jsx(NodeViewWrapper, { as: "figure", style: { margin: '0.5em 0' }, children: _jsx("img", { src: resolvedSrc, alt: alt || '', title: title || undefined, style: { maxWidth: '100%', height: 'auto', display: 'block' } }) }));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Image extension with a custom React NodeView that resolves URLs
|
|
45
|
+
* through the EditorContext's MediaProvider.
|
|
46
|
+
*/
|
|
47
|
+
export const ImageWithMediaProvider = Image.extend({
|
|
48
|
+
addNodeView() {
|
|
49
|
+
return ReactNodeViewRenderer(ImageComponent);
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=ImageNodeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageNodeView.js","sourceRoot":"","sources":["../src/ImageNodeView.tsx"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,SAAS,cAAc,CAAC,EAAE,IAAI,EAAiB;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAoD,CAAC;IACtF,MAAM,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEpD,MAAM,UAAU,GACd,GAAG;QACH,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACxB,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACxB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,cAAc,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAChC,CAAC,QAAQ,EAAE,EAAE;YACX,IAAI,CAAC,SAAS;gBAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,EACD,GAAG,EAAE;YACH,IAAI,CAAC,SAAS;gBAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CACF,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAErC,OAAO,CACL,KAAC,eAAe,IAAC,EAAE,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YACvD,cACE,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,GAAG,IAAI,EAAE,EACd,KAAK,EAAE,KAAK,IAAI,SAAS,EACzB,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAC7D,GACc,CACnB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC;IACjD,WAAW;QACT,OAAO,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PreviewControls
|
|
3
|
+
*
|
|
4
|
+
* Shared context and inline toolbar component for preview settings
|
|
5
|
+
* (viewport format, display mode, theme, transform, caption style).
|
|
6
|
+
*
|
|
7
|
+
* The context is provided by EditorShell and consumed by both:
|
|
8
|
+
* - PreviewControls (toolbar dropdowns, rendered in the main toolbar)
|
|
9
|
+
* - PreviewPanel (the actual player, which reads the selected values)
|
|
10
|
+
*/
|
|
11
|
+
import type { ReactNode } from 'react';
|
|
12
|
+
import type { DisplayMode, CaptionStyle } from '@bendyline/squisq-react';
|
|
13
|
+
import type { ViewportPreset, ViewportConfig } from '@bendyline/squisq/schemas';
|
|
14
|
+
import type { Theme } from '@bendyline/squisq/schemas';
|
|
15
|
+
import type { Doc } from '@bendyline/squisq/schemas';
|
|
16
|
+
export interface PreviewSettings {
|
|
17
|
+
activePreset: ViewportPreset;
|
|
18
|
+
setSelectedPreset: (preset: ViewportPreset | null) => void;
|
|
19
|
+
activeViewport: ViewportConfig;
|
|
20
|
+
activeDisplayMode: DisplayMode;
|
|
21
|
+
setSelectedDisplayMode: (mode: DisplayMode | null) => void;
|
|
22
|
+
activeThemeId: string;
|
|
23
|
+
setSelectedThemeId: (id: string | null) => void;
|
|
24
|
+
activeTheme: Theme;
|
|
25
|
+
activeTransformStyle: string;
|
|
26
|
+
setSelectedTransformStyle: (id: string | null) => void;
|
|
27
|
+
activeCaptionStyle: CaptionStyle;
|
|
28
|
+
setSelectedCaptionStyle: (style: CaptionStyle | null) => void;
|
|
29
|
+
}
|
|
30
|
+
export declare function usePreviewSettings(): PreviewSettings;
|
|
31
|
+
export interface PreviewSettingsProviderProps {
|
|
32
|
+
doc: Doc | null;
|
|
33
|
+
children: ReactNode;
|
|
34
|
+
}
|
|
35
|
+
export declare function PreviewSettingsProvider({ doc, children }: PreviewSettingsProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
/**
|
|
37
|
+
* Inline preview controls rendered in the main toolbar row.
|
|
38
|
+
* Reads from PreviewSettingsContext.
|
|
39
|
+
*/
|
|
40
|
+
export declare function PreviewToolbarControls(): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
//# sourceMappingURL=PreviewControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewControls.d.ts","sourceRoot":"","sources":["../src/PreviewControls.tsx"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,cAAc,CAAC;IAC7B,iBAAiB,EAAE,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,WAAW,CAAC;IAC/B,sBAAsB,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,WAAW,EAAE,KAAK,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,kBAAkB,EAAE,YAAY,CAAC;IACjC,uBAAuB,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/D;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD;AAgED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAyEtF;AAiDD;;;GAGG;AACH,wBAAgB,sBAAsB,4CAuFrC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable react-refresh/only-export-components */
|
|
3
|
+
/**
|
|
4
|
+
* PreviewControls
|
|
5
|
+
*
|
|
6
|
+
* Shared context and inline toolbar component for preview settings
|
|
7
|
+
* (viewport format, display mode, theme, transform, caption style).
|
|
8
|
+
*
|
|
9
|
+
* The context is provided by EditorShell and consumed by both:
|
|
10
|
+
* - PreviewControls (toolbar dropdowns, rendered in the main toolbar)
|
|
11
|
+
* - PreviewPanel (the actual player, which reads the selected values)
|
|
12
|
+
*/
|
|
13
|
+
import { createContext, useContext, useState, useMemo, useEffect } from 'react';
|
|
14
|
+
import { VIEWPORT_PRESETS, getThemeSummaries, resolveTheme } from '@bendyline/squisq/schemas';
|
|
15
|
+
import { getTransformStyleSummaries } from '@bendyline/squisq/transform';
|
|
16
|
+
const PreviewSettingsContext = createContext(null);
|
|
17
|
+
export function usePreviewSettings() {
|
|
18
|
+
const ctx = useContext(PreviewSettingsContext);
|
|
19
|
+
if (!ctx)
|
|
20
|
+
throw new Error('usePreviewSettings must be used within PreviewSettingsProvider');
|
|
21
|
+
return ctx;
|
|
22
|
+
}
|
|
23
|
+
// ── Frontmatter resolvers ────────────────────────────────────────
|
|
24
|
+
function resolveRenderAs(value) {
|
|
25
|
+
if (typeof value !== 'string')
|
|
26
|
+
return null;
|
|
27
|
+
const v = value.trim().toLowerCase();
|
|
28
|
+
const mapping = {
|
|
29
|
+
landscape: 'landscape',
|
|
30
|
+
'16:9': 'landscape',
|
|
31
|
+
widescreen: 'landscape',
|
|
32
|
+
portrait: 'portrait',
|
|
33
|
+
'9:16': 'portrait',
|
|
34
|
+
vertical: 'portrait',
|
|
35
|
+
stories: 'portrait',
|
|
36
|
+
square: 'square',
|
|
37
|
+
'1:1': 'square',
|
|
38
|
+
standard: 'standard',
|
|
39
|
+
'4:3': 'standard',
|
|
40
|
+
};
|
|
41
|
+
return mapping[v] ?? null;
|
|
42
|
+
}
|
|
43
|
+
function resolveDisplayMode(value) {
|
|
44
|
+
if (typeof value !== 'string')
|
|
45
|
+
return null;
|
|
46
|
+
const v = value.trim().toLowerCase();
|
|
47
|
+
if (v === 'video' || v === 'slideshow' || v === 'linear')
|
|
48
|
+
return v;
|
|
49
|
+
if (v === 'slides' || v === 'presentation' || v === 'deck')
|
|
50
|
+
return 'slideshow';
|
|
51
|
+
if (v === 'document' || v === 'scroll' || v === 'page')
|
|
52
|
+
return 'linear';
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const VALID_THEME_IDS = new Set(getThemeSummaries().map((s) => s.id));
|
|
56
|
+
function resolveFrontmatterTheme(value) {
|
|
57
|
+
if (typeof value !== 'string')
|
|
58
|
+
return null;
|
|
59
|
+
const v = value.trim().toLowerCase();
|
|
60
|
+
if (VALID_THEME_IDS.has(v))
|
|
61
|
+
return v;
|
|
62
|
+
const normalized = v.replace(/\s+/g, '-');
|
|
63
|
+
if (VALID_THEME_IDS.has(normalized))
|
|
64
|
+
return normalized;
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const VALID_TRANSFORM_IDS = new Set(getTransformStyleSummaries().map((s) => s.id));
|
|
68
|
+
function resolveFrontmatterTransform(value) {
|
|
69
|
+
if (typeof value !== 'string')
|
|
70
|
+
return null;
|
|
71
|
+
const v = value.trim().toLowerCase();
|
|
72
|
+
if (VALID_TRANSFORM_IDS.has(v))
|
|
73
|
+
return v;
|
|
74
|
+
const normalized = v.replace(/\s+/g, '-');
|
|
75
|
+
if (VALID_TRANSFORM_IDS.has(normalized))
|
|
76
|
+
return normalized;
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
function resolveFrontmatterCaptionStyle(value) {
|
|
80
|
+
if (typeof value !== 'string')
|
|
81
|
+
return null;
|
|
82
|
+
const v = value.trim().toLowerCase();
|
|
83
|
+
if (v === 'standard' || v === 'social')
|
|
84
|
+
return v;
|
|
85
|
+
if (v === 'instagram' || v === 'tiktok' || v === 'reels')
|
|
86
|
+
return 'social';
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
export function PreviewSettingsProvider({ doc, children }) {
|
|
90
|
+
const frontmatter = doc?.frontmatter;
|
|
91
|
+
// Viewport
|
|
92
|
+
const fmPreset = useMemo(() => resolveRenderAs(frontmatter?.['document-render-as']), [frontmatter]);
|
|
93
|
+
const [selectedPreset, setSelectedPreset] = useState(null);
|
|
94
|
+
useEffect(() => setSelectedPreset(null), [fmPreset]);
|
|
95
|
+
const activePreset = selectedPreset ?? fmPreset ?? 'landscape';
|
|
96
|
+
const activeViewport = VIEWPORT_PRESETS[activePreset];
|
|
97
|
+
// Display mode
|
|
98
|
+
const fmMode = useMemo(() => resolveDisplayMode(frontmatter?.['display-mode']), [frontmatter]);
|
|
99
|
+
const [selectedDisplayMode, setSelectedDisplayMode] = useState(null);
|
|
100
|
+
useEffect(() => setSelectedDisplayMode(null), [fmMode]);
|
|
101
|
+
const activeDisplayMode = selectedDisplayMode ?? fmMode ?? 'video';
|
|
102
|
+
// Theme
|
|
103
|
+
const fmTheme = useMemo(() => resolveFrontmatterTheme(frontmatter?.['theme']), [frontmatter]);
|
|
104
|
+
const [selectedThemeId, setSelectedThemeId] = useState(null);
|
|
105
|
+
useEffect(() => setSelectedThemeId(null), [fmTheme]);
|
|
106
|
+
const activeThemeId = selectedThemeId ?? fmTheme ?? 'standard';
|
|
107
|
+
const activeTheme = useMemo(() => resolveTheme(activeThemeId), [activeThemeId]);
|
|
108
|
+
// Transform
|
|
109
|
+
const fmTransform = useMemo(() => resolveFrontmatterTransform(frontmatter?.['transform-style']), [frontmatter]);
|
|
110
|
+
const [selectedTransformStyle, setSelectedTransformStyle] = useState(null);
|
|
111
|
+
useEffect(() => setSelectedTransformStyle(null), [fmTransform]);
|
|
112
|
+
const activeTransformStyle = selectedTransformStyle ?? fmTransform ?? '';
|
|
113
|
+
// Caption style
|
|
114
|
+
const fmCaption = useMemo(() => resolveFrontmatterCaptionStyle(frontmatter?.['caption-style']), [frontmatter]);
|
|
115
|
+
const [selectedCaptionStyle, setSelectedCaptionStyle] = useState(null);
|
|
116
|
+
useEffect(() => setSelectedCaptionStyle(null), [fmCaption]);
|
|
117
|
+
const activeCaptionStyle = selectedCaptionStyle ?? fmCaption ?? 'standard';
|
|
118
|
+
const value = useMemo(() => ({
|
|
119
|
+
activePreset,
|
|
120
|
+
setSelectedPreset,
|
|
121
|
+
activeViewport,
|
|
122
|
+
activeDisplayMode,
|
|
123
|
+
setSelectedDisplayMode,
|
|
124
|
+
activeThemeId,
|
|
125
|
+
setSelectedThemeId,
|
|
126
|
+
activeTheme,
|
|
127
|
+
activeTransformStyle,
|
|
128
|
+
setSelectedTransformStyle,
|
|
129
|
+
activeCaptionStyle,
|
|
130
|
+
setSelectedCaptionStyle,
|
|
131
|
+
}), [
|
|
132
|
+
activePreset,
|
|
133
|
+
activeViewport,
|
|
134
|
+
activeDisplayMode,
|
|
135
|
+
activeThemeId,
|
|
136
|
+
activeTheme,
|
|
137
|
+
activeTransformStyle,
|
|
138
|
+
activeCaptionStyle,
|
|
139
|
+
]);
|
|
140
|
+
return (_jsx(PreviewSettingsContext.Provider, { value: value, children: children }));
|
|
141
|
+
}
|
|
142
|
+
// ── Dropdown options ─────────────────────────────────────────────
|
|
143
|
+
const VIEWPORT_OPTIONS = [
|
|
144
|
+
{ key: 'landscape', label: '16:9' },
|
|
145
|
+
{ key: 'portrait', label: '9:16' },
|
|
146
|
+
{ key: 'square', label: '1:1' },
|
|
147
|
+
{ key: 'standard', label: '4:3' },
|
|
148
|
+
];
|
|
149
|
+
const DISPLAY_MODE_OPTIONS = [
|
|
150
|
+
{ key: 'video', label: 'Video' },
|
|
151
|
+
{ key: 'slideshow', label: 'Slideshow' },
|
|
152
|
+
{ key: 'linear', label: 'Document' },
|
|
153
|
+
];
|
|
154
|
+
const THEME_OPTIONS = getThemeSummaries().map((s) => ({ key: s.id, label: s.name }));
|
|
155
|
+
const TRANSFORM_STYLE_OPTIONS = [
|
|
156
|
+
{ key: '', label: 'None' },
|
|
157
|
+
...getTransformStyleSummaries().map((s) => ({ key: s.id, label: s.name })),
|
|
158
|
+
];
|
|
159
|
+
const CAPTION_STYLE_OPTIONS = [
|
|
160
|
+
{ key: 'standard', label: 'Standard' },
|
|
161
|
+
{ key: 'social', label: 'Social' },
|
|
162
|
+
];
|
|
163
|
+
// ── Shared styles ────────────────────────────────────────────────
|
|
164
|
+
const labelStyle = {
|
|
165
|
+
color: 'var(--squisq-text-muted, #6b7280)',
|
|
166
|
+
fontSize: '12px',
|
|
167
|
+
whiteSpace: 'nowrap',
|
|
168
|
+
};
|
|
169
|
+
const selectStyle = {
|
|
170
|
+
padding: '2px 6px',
|
|
171
|
+
borderRadius: '4px',
|
|
172
|
+
border: '1px solid var(--squisq-border, #d1d5db)',
|
|
173
|
+
background: 'var(--squisq-input-bg, #fff)',
|
|
174
|
+
color: 'var(--squisq-text, #1f2937)',
|
|
175
|
+
fontSize: '12px',
|
|
176
|
+
cursor: 'pointer',
|
|
177
|
+
};
|
|
178
|
+
// ── Toolbar Controls Component ───────────────────────────────────
|
|
179
|
+
/**
|
|
180
|
+
* Inline preview controls rendered in the main toolbar row.
|
|
181
|
+
* Reads from PreviewSettingsContext.
|
|
182
|
+
*/
|
|
183
|
+
export function PreviewToolbarControls() {
|
|
184
|
+
const s = usePreviewSettings();
|
|
185
|
+
return (_jsxs("div", { style: {
|
|
186
|
+
display: 'flex',
|
|
187
|
+
alignItems: 'center',
|
|
188
|
+
gap: '6px',
|
|
189
|
+
flexWrap: 'wrap',
|
|
190
|
+
padding: '2px 0 2px 9px',
|
|
191
|
+
}, children: [_jsx("label", { style: labelStyle, children: "Format:" }), _jsx("select", { value: s.activePreset, onChange: (e) => s.setSelectedPreset(e.target.value), style: selectStyle, children: VIEWPORT_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) }), _jsx(Divider, {}), _jsx("label", { style: labelStyle, children: "Mode:" }), _jsx("select", { value: s.activeDisplayMode, onChange: (e) => s.setSelectedDisplayMode(e.target.value), style: selectStyle, children: DISPLAY_MODE_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) }), _jsx(Divider, {}), _jsx("label", { style: labelStyle, children: "Theme:" }), _jsx("select", { value: s.activeThemeId, onChange: (e) => s.setSelectedThemeId(e.target.value), style: selectStyle, children: THEME_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) }), _jsx(Divider, {}), _jsx("label", { style: labelStyle, children: "Transform:" }), _jsx("select", { value: s.activeTransformStyle, onChange: (e) => s.setSelectedTransformStyle(e.target.value), style: selectStyle, children: TRANSFORM_STYLE_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) }), _jsx(Divider, {}), _jsx("label", { style: labelStyle, children: "Captions:" }), _jsx("select", { value: s.activeCaptionStyle, onChange: (e) => s.setSelectedCaptionStyle(e.target.value), style: selectStyle, children: CAPTION_STYLE_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) })] }));
|
|
192
|
+
}
|
|
193
|
+
function Divider() {
|
|
194
|
+
return (_jsx("span", { style: {
|
|
195
|
+
width: '1px',
|
|
196
|
+
height: '16px',
|
|
197
|
+
background: 'var(--squisq-border, #d1d5db)',
|
|
198
|
+
margin: '0 2px',
|
|
199
|
+
} }));
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=PreviewControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewControls.js","sourceRoot":"","sources":["../src/PreviewControls.tsx"],"names":[],"mappings":"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"}
|
package/dist/PreviewPanel.d.ts
CHANGED
|
@@ -15,19 +15,19 @@
|
|
|
15
15
|
* (the player enters fallback-timer mode when audio can't load)
|
|
16
16
|
* 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
|
|
17
17
|
*/
|
|
18
|
+
import type { ContentContainer } from '@bendyline/squisq/storage';
|
|
18
19
|
export interface PreviewPanelProps {
|
|
19
20
|
/** Base path for resolving media URLs in DocPlayer */
|
|
20
21
|
basePath?: string;
|
|
21
22
|
/** Additional class name for the container */
|
|
22
23
|
className?: string;
|
|
24
|
+
/** Optional ContentContainer for audio mapping (MP3 discovery + timing.json) */
|
|
25
|
+
container?: ContentContainer | null;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
|
-
* Live preview panel that renders the current document as a slideshow
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* Includes a viewport format dropdown above the player. The default
|
|
30
|
-
* format can be hinted via YAML frontmatter `document-render-as:`.
|
|
28
|
+
* Live preview panel that renders the current document as a slideshow
|
|
29
|
+
* or document view. Controls (viewport, mode, theme, transform, captions)
|
|
30
|
+
* are rendered in the main toolbar via PreviewToolbarControls.
|
|
31
31
|
*/
|
|
32
|
-
export declare function PreviewPanel({ basePath, className }: PreviewPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare function PreviewPanel({ basePath, className, container }: PreviewPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
33
33
|
//# sourceMappingURL=PreviewPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACrC;AAmUD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA2HvF"}
|