@bendyline/squisq-editor-react 1.2.0 → 1.2.2
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/PreviewControls.d.ts +1 -1
- package/dist/PreviewControls.d.ts.map +1 -1
- package/dist/PreviewControls.js +36 -17
- package/dist/PreviewControls.js.map +1 -1
- package/dist/PreviewPanel.d.ts +3 -8
- package/dist/PreviewPanel.d.ts.map +1 -1
- package/dist/PreviewPanel.js +4 -282
- package/dist/PreviewPanel.js.map +1 -1
- package/dist/RawEditor.d.ts.map +1 -1
- package/dist/RawEditor.js +10 -1
- package/dist/RawEditor.js.map +1 -1
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +16 -4
- package/dist/Toolbar.js.map +1 -1
- package/dist/buildPreviewDoc.d.ts +22 -0
- package/dist/buildPreviewDoc.d.ts.map +1 -0
- package/dist/buildPreviewDoc.js +212 -0
- package/dist/buildPreviewDoc.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +23 -23
- package/src/PreviewControls.tsx +116 -87
- package/src/PreviewPanel.tsx +5 -333
- package/src/RawEditor.tsx +10 -1
- package/src/Toolbar.tsx +20 -5
- package/src/buildPreviewDoc.ts +254 -0
- package/src/index.ts +3 -0
- package/src/styles/editor.css +57 -0
|
@@ -35,7 +35,7 @@ export interface PreviewSettingsProviderProps {
|
|
|
35
35
|
export declare function PreviewSettingsProvider({ doc, children }: PreviewSettingsProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
36
36
|
/**
|
|
37
37
|
* Inline preview controls rendered in the main toolbar row.
|
|
38
|
-
*
|
|
38
|
+
* On narrow viewports, collapses into a single settings button with a dropdown.
|
|
39
39
|
*/
|
|
40
40
|
export declare function PreviewToolbarControls(): import("react/jsx-runtime").JSX.Element;
|
|
41
41
|
//# sourceMappingURL=PreviewControls.d.ts.map
|
|
@@ -1 +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;
|
|
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;AA+DD;;;GAGG;AACH,wBAAgB,sBAAsB,4CAwFrC"}
|
package/dist/PreviewControls.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
|
/* eslint-disable react-refresh/only-export-components */
|
|
3
3
|
/**
|
|
4
4
|
* PreviewControls
|
|
@@ -10,7 +10,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* - PreviewControls (toolbar dropdowns, rendered in the main toolbar)
|
|
11
11
|
* - PreviewPanel (the actual player, which reads the selected values)
|
|
12
12
|
*/
|
|
13
|
-
import { createContext, useContext, useState, useMemo, useEffect } from 'react';
|
|
13
|
+
import { createContext, useContext, useState, useMemo, useEffect, useRef } from 'react';
|
|
14
14
|
import { VIEWPORT_PRESETS, getThemeSummaries, resolveTheme } from '@bendyline/squisq/schemas';
|
|
15
15
|
import { getTransformStyleSummaries } from '@bendyline/squisq/transform';
|
|
16
16
|
const PreviewSettingsContext = createContext(null);
|
|
@@ -176,26 +176,45 @@ const selectStyle = {
|
|
|
176
176
|
cursor: 'pointer',
|
|
177
177
|
};
|
|
178
178
|
// ── Toolbar Controls Component ───────────────────────────────────
|
|
179
|
+
/** Hook to track whether the viewport is narrow. */
|
|
180
|
+
function useIsNarrow(breakpoint = 600) {
|
|
181
|
+
const [narrow, setNarrow] = useState(() => typeof window !== 'undefined' && window.innerWidth <= breakpoint);
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
const mq = window.matchMedia(`(max-width: ${breakpoint}px)`);
|
|
184
|
+
const handler = (e) => setNarrow(e.matches);
|
|
185
|
+
mq.addEventListener('change', handler);
|
|
186
|
+
return () => mq.removeEventListener('change', handler);
|
|
187
|
+
}, [breakpoint]);
|
|
188
|
+
return narrow;
|
|
189
|
+
}
|
|
179
190
|
/**
|
|
180
191
|
* Inline preview controls rendered in the main toolbar row.
|
|
181
|
-
*
|
|
192
|
+
* On narrow viewports, collapses into a single settings button with a dropdown.
|
|
182
193
|
*/
|
|
183
194
|
export function PreviewToolbarControls() {
|
|
184
195
|
const s = usePreviewSettings();
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
const isNarrow = useIsNarrow(768);
|
|
197
|
+
const [popoverOpen, setPopoverOpen] = useState(false);
|
|
198
|
+
const popoverRef = useRef(null);
|
|
199
|
+
// Close popover on outside click
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
if (!popoverOpen)
|
|
202
|
+
return;
|
|
203
|
+
const handler = (e) => {
|
|
204
|
+
if (popoverRef.current && !popoverRef.current.contains(e.target)) {
|
|
205
|
+
setPopoverOpen(false);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
document.addEventListener('mousedown', handler);
|
|
209
|
+
return () => document.removeEventListener('mousedown', handler);
|
|
210
|
+
}, [popoverOpen]);
|
|
211
|
+
const controls = (_jsxs(_Fragment, { children: [_jsx(PreviewSelect, { label: "Format", value: s.activePreset, options: VIEWPORT_OPTIONS, onChange: (v) => s.setSelectedPreset(v), compact: isNarrow }), _jsx(PreviewSelect, { label: "Mode", value: s.activeDisplayMode, options: DISPLAY_MODE_OPTIONS, onChange: (v) => s.setSelectedDisplayMode(v), compact: isNarrow }), _jsx(PreviewSelect, { label: "Theme", value: s.activeThemeId, options: THEME_OPTIONS, onChange: (v) => s.setSelectedThemeId(v), compact: isNarrow }), _jsx(PreviewSelect, { label: "Transform", value: s.activeTransformStyle, options: TRANSFORM_STYLE_OPTIONS, onChange: (v) => s.setSelectedTransformStyle(v), compact: isNarrow }), _jsx(PreviewSelect, { label: "Captions", value: s.activeCaptionStyle, options: CAPTION_STYLE_OPTIONS, onChange: (v) => s.setSelectedCaptionStyle(v), compact: isNarrow })] }));
|
|
212
|
+
if (isNarrow) {
|
|
213
|
+
return (_jsxs("div", { className: "squisq-preview-controls-compact", ref: popoverRef, children: [_jsx("button", { className: "squisq-toolbar-button", onClick: () => setPopoverOpen((v) => !v), "aria-label": "Preview settings", title: "Preview settings", "aria-expanded": popoverOpen, children: _jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "8", cy: "8", r: "2.5" }), _jsx("path", { d: "M13.5 8a5.5 5.5 0 01-.4 1.8l1.2 1.2-1.6 1.6-1.2-1.2A5.5 5.5 0 018 13.5a5.5 5.5 0 01-3.5-1.3L3.3 13.4 1.7 11.8l1.2-1.2A5.5 5.5 0 012.5 8c0-.6.1-1.2.4-1.8L1.7 5 3.3 3.4l1.2 1.2A5.5 5.5 0 018 2.5c1.3 0 2.5.5 3.5 1.3l1.2-1.2 1.6 1.6-1.2 1.2c.3.6.4 1.2.4 1.6z" })] }) }), popoverOpen && _jsx("div", { className: "squisq-preview-controls-popover", children: controls })] }));
|
|
214
|
+
}
|
|
215
|
+
return _jsx("div", { className: "squisq-preview-controls-inline", children: controls });
|
|
192
216
|
}
|
|
193
|
-
function
|
|
194
|
-
return (_jsx("
|
|
195
|
-
width: '1px',
|
|
196
|
-
height: '16px',
|
|
197
|
-
background: 'var(--squisq-border, #d1d5db)',
|
|
198
|
-
margin: '0 2px',
|
|
199
|
-
} }));
|
|
217
|
+
function PreviewSelect({ label, value, options, onChange, compact, }) {
|
|
218
|
+
return (_jsxs("div", { className: `squisq-preview-control${compact ? ' squisq-preview-control--compact' : ''}`, children: [_jsxs("label", { style: labelStyle, children: [label, ":"] }), _jsx("select", { value: value, onChange: (e) => onChange(e.target.value), style: selectStyle, children: options.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) })] }));
|
|
200
219
|
}
|
|
201
220
|
//# sourceMappingURL=PreviewControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewControls.js","sourceRoot":"","sources":["../src/PreviewControls.tsx"],"names":[],"mappings":";AAAA,yDAAyD;AACzD;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PreviewControls.js","sourceRoot":"","sources":["../src/PreviewControls.tsx"],"names":[],"mappings":";AAAA,yDAAyD;AACzD;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAIxF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAoBzE,MAAM,sBAAsB,GAAG,aAAa,CAAyB,IAAI,CAAC,CAAC;AAE3E,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC5F,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oEAAoE;AAEpE,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAmC;QAC9C,SAAS,EAAE,WAAW;QACtB,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,WAAW;QACvB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,UAAU;KAClB,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC/E,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtE,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,0BAA0B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnF,SAAS,2BAA2B,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,uBAAuB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAgC;IACrF,MAAM,WAAW,GAAG,GAAG,EAAE,WAAW,CAAC;IAErC,WAAW;IACX,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAC1D,CAAC,WAAW,CAAC,CACd,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAClF,SAAS,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,cAAc,IAAI,QAAQ,IAAI,WAAW,CAAC;IAC/D,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtD,eAAe;IACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IACzF,SAAS,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,mBAAmB,IAAI,MAAM,IAAI,OAAO,CAAC;IAEnE,QAAQ;IACR,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9F,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC5E,SAAS,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,eAAe,IAAI,OAAO,IAAI,UAAU,CAAC;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhF,YAAY;IACZ,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,2BAA2B,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,CAAC,EACnE,CAAC,WAAW,CAAC,CACd,CAAC;IACF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1F,SAAS,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG,sBAAsB,IAAI,WAAW,IAAI,EAAE,CAAC;IAEzE,gBAAgB;IAChB,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,8BAA8B,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,CAAC,EACpE,CAAC,WAAW,CAAC,CACd,CAAC;IACF,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAC5F,SAAS,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,kBAAkB,GAAG,oBAAoB,IAAI,SAAS,IAAI,UAAU,CAAC;IAE3E,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,YAAY;QACZ,iBAAiB;QACjB,cAAc;QACd,iBAAiB;QACjB,sBAAsB;QACtB,aAAa;QACb,kBAAkB;QAClB,WAAW;QACX,oBAAoB;QACpB,yBAAyB;QACzB,kBAAkB;QAClB,uBAAuB;KACxB,CAAC,EACF;QACE,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,WAAW;QACX,oBAAoB;QACpB,kBAAkB;KACnB,CACF,CAAC;IAEF,OAAO,CACL,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAmC,CAC5F,CAAC;AACJ,CAAC;AAED,oEAAoE;AAEpE,MAAM,gBAAgB,GAA6C;IACjE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;IACnC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;IAC/B,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;CAClC,CAAC;AAEF,MAAM,oBAAoB,GAA0C;IAClE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;IACxC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;CACrC,CAAC;AAEF,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAErF,MAAM,uBAAuB,GAAG;IAC9B,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAC1B,GAAG,0BAA0B,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;CAC3E,CAAC;AAEF,MAAM,qBAAqB,GAA2C;IACpE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACtC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;CACnC,CAAC;AAEF,oEAAoE;AAEpE,MAAM,UAAU,GAAwB;IACtC,KAAK,EAAE,mCAAmC;IAC1C,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,MAAM,WAAW,GAAwB;IACvC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,KAAK;IACnB,MAAM,EAAE,yCAAyC;IACjD,UAAU,EAAE,8BAA8B;IAC1C,KAAK,EAAE,6BAA6B;IACpC,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,oEAAoE;AAEpE,oDAAoD;AACpD,SAAS,WAAW,CAAC,UAAU,GAAG,GAAG;IACnC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAClC,GAAG,EAAE,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,IAAI,UAAU,CACvE,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,UAAU,KAAK,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,CAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEhD,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE;YAChC,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;gBACzE,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,CACf,8BACE,KAAC,aAAa,IACZ,KAAK,EAAC,QAAQ,EACd,KAAK,EAAE,CAAC,CAAC,YAAY,EACrB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAmB,CAAC,EACzD,OAAO,EAAE,QAAQ,GACjB,EACF,KAAC,aAAa,IACZ,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,CAAC,CAAC,iBAAiB,EAC1B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAgB,CAAC,EAC3D,OAAO,EAAE,QAAQ,GACjB,EACF,KAAC,aAAa,IACZ,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,CAAC,CAAC,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EACxC,OAAO,EAAE,QAAQ,GACjB,EACF,KAAC,aAAa,IACZ,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,CAAC,CAAC,oBAAoB,EAC7B,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAC/C,OAAO,EAAE,QAAQ,GACjB,EACF,KAAC,aAAa,IACZ,KAAK,EAAC,UAAU,EAChB,KAAK,EAAE,CAAC,CAAC,kBAAkB,EAC3B,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAiB,CAAC,EAC7D,OAAO,EAAE,QAAQ,GACjB,IACD,CACJ,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,eAAK,SAAS,EAAC,iCAAiC,EAAC,GAAG,EAAE,UAAU,aAC9D,iBACE,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAC7B,kBAAkB,EAC7B,KAAK,EAAC,kBAAkB,mBACT,WAAW,YAE1B,eACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,aAEtB,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,KAAK,GAAG,EAChC,eAAM,CAAC,EAAC,gQAAgQ,GAAG,IACvQ,GACC,EACR,WAAW,IAAI,cAAK,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAO,IAC7E,CACP,CAAC;IACJ,CAAC;IAED,OAAO,cAAK,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAO,CAAC;AAC1E,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,GAOR;IACC,OAAO,CACL,eAAK,SAAS,EAAE,yBAAyB,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,EAAE,aAC1F,iBAAO,KAAK,EAAE,UAAU,aAAG,KAAK,SAAU,EAC1C,iBAAQ,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,YAChF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,iBAAoB,KAAK,EAAE,CAAC,CAAC,GAAG,YAC7B,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,GAAG,CAET,CACV,CAAC,GACK,IACL,CACP,CAAC;AACJ,CAAC"}
|
package/dist/PreviewPanel.d.ts
CHANGED
|
@@ -6,14 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
|
|
8
8
|
* with template names, heading text, and body content — but no audio or
|
|
9
|
-
* visual layers. This component bridges the gap by
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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
|
|
9
|
+
* visual layers. This component bridges the gap by using buildPreviewDoc()
|
|
10
|
+
* to flatten blocks, convert them to TemplateBlock slides with interleaved
|
|
11
|
+
* images, and synthesize timing.
|
|
17
12
|
*/
|
|
18
13
|
import type { ContentContainer } from '@bendyline/squisq/storage';
|
|
19
14
|
export interface PreviewPanelProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAKlE,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;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA2HvF"}
|
package/dist/PreviewPanel.js
CHANGED
|
@@ -7,295 +7,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
*
|
|
8
8
|
* The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
|
|
9
9
|
* with template names, heading text, and body content — but no audio or
|
|
10
|
-
* visual layers. This component bridges the gap by
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
|
10
|
+
* visual layers. This component bridges the gap by using buildPreviewDoc()
|
|
11
|
+
* to flatten blocks, convert them to TemplateBlock slides with interleaved
|
|
12
|
+
* images, and synthesize timing.
|
|
18
13
|
*/
|
|
19
14
|
import { useState, useEffect } from 'react';
|
|
20
15
|
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 { getChildren } from '@bendyline/squisq/markdown';
|
|
25
16
|
import { applyTransform } from '@bendyline/squisq/transform';
|
|
26
17
|
import { resolveAudioMapping } from '@bendyline/squisq/doc';
|
|
27
18
|
import { useEditorContext } from './EditorContext';
|
|
28
19
|
import { usePreviewSettings } from './PreviewControls';
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Extract plain text from an array of markdown block nodes.
|
|
32
|
-
* Walks paragraphs, blockquotes, and list items to collect all text.
|
|
33
|
-
*/
|
|
34
|
-
function extractBodyText(contents) {
|
|
35
|
-
if (!contents || contents.length === 0)
|
|
36
|
-
return '';
|
|
37
|
-
const parts = [];
|
|
38
|
-
for (const node of contents) {
|
|
39
|
-
parts.push(extractPlainText(node));
|
|
40
|
-
}
|
|
41
|
-
return parts.join('\n').trim();
|
|
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
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Extract list items from markdown body content.
|
|
92
|
-
* Returns an array of plain text strings for each list item found.
|
|
93
|
-
*/
|
|
94
|
-
function extractListItems(contents) {
|
|
95
|
-
if (!contents)
|
|
96
|
-
return [];
|
|
97
|
-
const items = [];
|
|
98
|
-
for (const node of contents) {
|
|
99
|
-
if (node.type === 'list') {
|
|
100
|
-
for (const item of node.children) {
|
|
101
|
-
const text = extractPlainText(item).trim();
|
|
102
|
-
if (text)
|
|
103
|
-
items.push(text);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return items;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Provide sensible default fields for templates that require more than
|
|
111
|
-
* just a `title`. This prevents crashes from undefined required fields
|
|
112
|
-
* when the markdown annotations don't supply all template-specific values.
|
|
113
|
-
*/
|
|
114
|
-
function getTemplateDefaults(templateName, headingText, block) {
|
|
115
|
-
const body = extractBodyText(block.contents);
|
|
116
|
-
switch (templateName) {
|
|
117
|
-
case 'statHighlight':
|
|
118
|
-
return {
|
|
119
|
-
stat: headingText,
|
|
120
|
-
description: body || headingText,
|
|
121
|
-
};
|
|
122
|
-
case 'quoteBlock':
|
|
123
|
-
case 'fullBleedQuote':
|
|
124
|
-
case 'pullQuote':
|
|
125
|
-
return {
|
|
126
|
-
quote: body || headingText,
|
|
127
|
-
};
|
|
128
|
-
case 'factCard':
|
|
129
|
-
return {
|
|
130
|
-
fact: headingText,
|
|
131
|
-
explanation: body || headingText,
|
|
132
|
-
};
|
|
133
|
-
case 'comparisonBar':
|
|
134
|
-
return {
|
|
135
|
-
leftLabel: 'A',
|
|
136
|
-
leftValue: 60,
|
|
137
|
-
rightLabel: 'B',
|
|
138
|
-
rightValue: 40,
|
|
139
|
-
};
|
|
140
|
-
case 'listBlock':
|
|
141
|
-
return {
|
|
142
|
-
items: extractListItems(block.contents) || ['Item 1', 'Item 2', 'Item 3'],
|
|
143
|
-
};
|
|
144
|
-
case 'definitionCard':
|
|
145
|
-
return {
|
|
146
|
-
term: headingText,
|
|
147
|
-
definition: body || headingText,
|
|
148
|
-
};
|
|
149
|
-
case 'dateEvent':
|
|
150
|
-
return {
|
|
151
|
-
date: headingText,
|
|
152
|
-
description: body || headingText,
|
|
153
|
-
};
|
|
154
|
-
default:
|
|
155
|
-
return {};
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Convert a markdown-derived Block into a TemplateBlock-compatible object.
|
|
160
|
-
*
|
|
161
|
-
* The block's heading text becomes `title` (works for sectionHeader,
|
|
162
|
-
* titleBlock, factCard, etc.). Any templateOverrides from annotation
|
|
163
|
-
* syntax `{[template key=value]}` are spread on top so template-specific
|
|
164
|
-
* fields (stat, quote, description, …) are available.
|
|
165
|
-
*
|
|
166
|
-
* If the requested template doesn't exist in the registry, falls back
|
|
167
|
-
* to `sectionHeader` to avoid "Unknown template" warnings.
|
|
168
|
-
*/
|
|
169
|
-
function blockToSlide(block, index) {
|
|
170
|
-
const headingText = block.sourceHeading
|
|
171
|
-
? extractPlainText(block.sourceHeading)
|
|
172
|
-
: block.title || block.id || `Slide ${index + 1}`;
|
|
173
|
-
// Validate template name — fall back to sectionHeader for unknowns
|
|
174
|
-
const requestedTemplate = block.template || 'sectionHeader';
|
|
175
|
-
const template = hasTemplate(requestedTemplate) ? requestedTemplate : 'sectionHeader';
|
|
176
|
-
// Get sensible defaults for templates that need more than just `title`
|
|
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;
|
|
184
|
-
return {
|
|
185
|
-
id: block.id,
|
|
186
|
-
template,
|
|
187
|
-
duration: block.duration,
|
|
188
|
-
audioSegment: 0,
|
|
189
|
-
transition: index > 0 ? { type: 'fade', duration: 0.5 } : undefined,
|
|
190
|
-
// Provide heading text as title — consumed by sectionHeader, titleBlock, etc.
|
|
191
|
-
title: headingText,
|
|
192
|
-
// Template-specific defaults (safe fallbacks for required fields)
|
|
193
|
-
...defaults,
|
|
194
|
-
// Template-specific fields from transform (stat, description, quote, etc.)
|
|
195
|
-
...extraFields,
|
|
196
|
-
// Spread annotation overrides last so explicit values win
|
|
197
|
-
...block.templateOverrides,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
/** Ambient motions to rotate on image slides. */
|
|
201
|
-
const IMAGE_MOTIONS = [
|
|
202
|
-
'zoomIn',
|
|
203
|
-
'zoomOut',
|
|
204
|
-
'panLeft',
|
|
205
|
-
'panRight',
|
|
206
|
-
];
|
|
207
|
-
/**
|
|
208
|
-
* Build a player-ready Doc from the markdown-derived Doc.
|
|
209
|
-
*
|
|
210
|
-
* Flattens hierarchical blocks, converts each to a TemplateBlock-compatible
|
|
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.
|
|
218
|
-
*/
|
|
219
|
-
function buildPreviewDoc(doc) {
|
|
220
|
-
const flat = flattenBlocks(doc.blocks);
|
|
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
|
-
}
|
|
281
|
-
// Recalculate sequential timing
|
|
282
|
-
let t = 0;
|
|
283
|
-
for (const slide of slides) {
|
|
284
|
-
slide.startTime = t;
|
|
285
|
-
t += slide.duration;
|
|
286
|
-
}
|
|
287
|
-
return {
|
|
288
|
-
articleId: doc.articleId,
|
|
289
|
-
duration: t,
|
|
290
|
-
blocks: slides,
|
|
291
|
-
audio: {
|
|
292
|
-
// Synthetic segment — audio will fail to load and DocPlayer will use
|
|
293
|
-
// its fallback timer to advance currentTime via requestAnimationFrame.
|
|
294
|
-
segments: t > 0 ? [{ src: '', name: 'preview', duration: t, startTime: 0 }] : [],
|
|
295
|
-
},
|
|
296
|
-
...(doc.captions ? { captions: doc.captions } : {}),
|
|
297
|
-
};
|
|
298
|
-
}
|
|
20
|
+
import { buildPreviewDoc } from './buildPreviewDoc';
|
|
299
21
|
// ── Component ──────────────────────────────────────────────────────
|
|
300
22
|
/**
|
|
301
23
|
* Live preview panel that renders the current document as a slideshow
|
package/dist/PreviewPanel.js.map
CHANGED
|
@@ -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/RawEditor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,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"}
|
package/dist/RawEditor.js
CHANGED
|
@@ -11,7 +11,16 @@ import Editor, { loader } from '@monaco-editor/react';
|
|
|
11
11
|
import * as monaco from 'monaco-editor';
|
|
12
12
|
import { useEditorContext } from './EditorContext';
|
|
13
13
|
import { getAvailableTemplates } from '@bendyline/squisq/doc';
|
|
14
|
-
// Use locally installed monaco-editor instead of CDN
|
|
14
|
+
// Use locally installed monaco-editor instead of CDN.
|
|
15
|
+
//
|
|
16
|
+
// NOTE: By default this imports the full monaco-editor with all 80+ languages
|
|
17
|
+
// and workers (~9MB). Consumers can dramatically reduce bundle size by aliasing
|
|
18
|
+
// 'monaco-editor' to a slim entry in their bundler config. For example with Vite:
|
|
19
|
+
//
|
|
20
|
+
// resolve: { alias: [{ find: /^monaco-editor$/, replacement: './monaco-slim.ts' }] }
|
|
21
|
+
//
|
|
22
|
+
// Where monaco-slim.ts re-exports 'monaco-editor/esm/vs/editor/editor.api' plus
|
|
23
|
+
// only the language contributions needed (e.g. markdown, javascript, etc.).
|
|
15
24
|
loader.config({ monaco });
|
|
16
25
|
/**
|
|
17
26
|
* Raw markdown editor using Monaco Editor.
|
package/dist/RawEditor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,MAAM,EAAE,EAAE,MAAM,EAA+B,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,
|
|
1
|
+
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,MAAM,EAAE,EAAE,MAAM,EAA+B,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,kFAAkF;AAClF,EAAE;AACF,uFAAuF;AACvF,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAe1B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,GAAG,IAAI,EACZ,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,IAAI,EACf,SAAS,GACM;IACf,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAClF,MAAM,SAAS,GAAG,MAAM,CAA6C,IAAI,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,oBAAoB,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;IAErE,MAAM,WAAW,GAAY,WAAW,CACtC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACjB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,gEAAgE;QAChE,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAExC,kEAAkE;QAClE,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;QAC1C,oBAAoB,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,UAAU,EAAE;YACzF,iBAAiB,EAAE,CAAC,GAAG,CAAC;YACxB,sBAAsB,CAAC,KAA+B,EAAE,QAAyB;gBAC/E,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAE9D,mEAAmE;gBACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;oBAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBAE/D,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvE,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,UAAU,KAAK,CAAC,CAAC;oBAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;gBAElD,oDAAoD;gBACpD,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW;gBAC5C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAC5B,QAAQ,CAAC,UAAU,EACnB,QAAQ,EACR,QAAQ,CAAC,UAAU,EACnB,QAAQ,CAAC,MAAM,CAChB,CAAC;gBAEF,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK;oBAC/C,UAAU,EAAE,IAAI,GAAG,IAAI;oBACvB,KAAK;oBACL,MAAM,EAAE,gBAAgB;oBACxB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC,CAAC;gBAEJ,OAAO,EAAE,WAAW,EAAE,CAAC;YACzB,CAAC;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,wBAAwB;IACxB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxC,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAa,WAAW,CACxC,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,gBAAgB,CAAC,OAAO;YAAE,OAAO;QACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,YAAY,KAAK,cAAc,EAAE,CAAC;gBACpC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAChC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAChC,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAc,YAAY,YAC3F,KAAC,MAAM,IACL,eAAe,EAAC,UAAU,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE;gBACP,QAAQ;gBACR,QAAQ;gBACR,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC7B,WAAW,EAAE,IAAI;gBACjB,oBAAoB,EAAE,KAAK;gBAC3B,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,CAAC;gBACV,gBAAgB,EAAE,WAAW;gBAC7B,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;gBAC1C,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAC7B,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;aACjC,GACD,GACE,CACP,CAAC;AACJ,CAAC"}
|
package/dist/Toolbar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AAevC,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;AAyFD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,SAAS,GACV,EAAE,YAAY,
|
|
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;AAevC,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;AAyFD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,SAAS,GACV,EAAE,YAAY,2CA8xBd"}
|
package/dist/Toolbar.js
CHANGED
|
@@ -91,12 +91,24 @@ export function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAft
|
|
|
91
91
|
const { activeView, setActiveView, markdownSource, setMarkdownSource, tiptapEditor, monacoEditor, mediaProvider, } = useEditorContext();
|
|
92
92
|
// Hidden file input for image picker
|
|
93
93
|
const imageInputRef = useRef(null);
|
|
94
|
+
// ── Narrow-screen detection ──────────────────────────
|
|
95
|
+
const [isNarrow, setIsNarrow] = useState(() => typeof window !== 'undefined' && window.matchMedia('(max-width: 768px)').matches);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
const mq = window.matchMedia('(max-width: 768px)');
|
|
98
|
+
const handler = (e) => setIsNarrow(e.matches);
|
|
99
|
+
mq.addEventListener('change', handler);
|
|
100
|
+
return () => mq.removeEventListener('change', handler);
|
|
101
|
+
}, []);
|
|
94
102
|
// ── Overflow detection ────────────────────────────────
|
|
95
103
|
const actionsRef = useRef(null);
|
|
96
|
-
const [
|
|
104
|
+
const [measuredOverflowIndex, setMeasuredOverflowIndex] = useState(null);
|
|
97
105
|
const [showOverflow, setShowOverflow] = useState(false);
|
|
98
106
|
const overflowRef = useRef(null);
|
|
107
|
+
// On narrow screens, force all buttons into the overflow menu
|
|
108
|
+
const overflowIndex = isNarrow ? 0 : measuredOverflowIndex;
|
|
99
109
|
useEffect(() => {
|
|
110
|
+
if (isNarrow)
|
|
111
|
+
return; // Skip measurement on narrow — everything overflows
|
|
100
112
|
const container = actionsRef.current;
|
|
101
113
|
if (!container)
|
|
102
114
|
return;
|
|
@@ -113,13 +125,13 @@ export function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAft
|
|
|
113
125
|
firstHidden = i;
|
|
114
126
|
}
|
|
115
127
|
});
|
|
116
|
-
|
|
128
|
+
setMeasuredOverflowIndex(firstHidden);
|
|
117
129
|
};
|
|
118
130
|
const ro = new ResizeObserver(measure);
|
|
119
131
|
ro.observe(container);
|
|
120
132
|
measure();
|
|
121
133
|
return () => ro.disconnect();
|
|
122
|
-
}, [activeView]);
|
|
134
|
+
}, [activeView, isNarrow]);
|
|
123
135
|
// Close overflow menu on outside click
|
|
124
136
|
useEffect(() => {
|
|
125
137
|
if (!showOverflow)
|
|
@@ -424,7 +436,7 @@ export function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAft
|
|
|
424
436
|
handleImageFile(file);
|
|
425
437
|
// Reset so the same file can be re-selected
|
|
426
438
|
e.target.value = '';
|
|
427
|
-
} }), 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, "data-label": view.label, "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", ref: actionsRef, 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) => {
|
|
439
|
+
} }), 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, "data-label": view.label, "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 && !isNarrow && (_jsxs("div", { className: "squisq-toolbar-actions", ref: actionsRef, 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) => {
|
|
428
440
|
const active = isWysiwyg ? isTiptapActive(tiptapEditor, btn.id) : false;
|
|
429
441
|
const disabled = btn.id === 'image' && !mediaProvider;
|
|
430
442
|
return (_jsx("button", { className: `squisq-toolbar-button${active ? ' squisq-toolbar-button--active' : ''}`, title: disabled ? 'Insert image (requires media provider)' : btn.title, onClick: () => handleAction(btn.id), "aria-label": btn.title, "aria-pressed": active, disabled: disabled, style: btn.iconStyle, children: btn.id === 'table' ? (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round", children: [_jsx("rect", { x: "1", y: "1", width: "12", height: "12", rx: "1" }), _jsx("line", { x1: "1", y1: "5", x2: "13", y2: "5" }), _jsx("line", { x1: "1", y1: "9", x2: "13", y2: "9" }), _jsx("line", { x1: "5", y1: "1", x2: "5", y2: "13" }), _jsx("line", { x1: "9", y1: "1", x2: "9", y2: "13" })] })) : (btn.icon) }, btn.id));
|