@bendyline/squisq-editor-react 2.4.7 → 2.6.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/README.md +4 -1
- package/dist/{chunk-55DQFHK5.js → chunk-5FG3NAPH.js} +780 -244
- package/dist/{chunk-ZSQN6IO7.js → chunk-JUAQQTJE.js} +15 -8
- package/dist/{chunk-4F7SN6WU.js → chunk-WH3DL6TG.js} +1 -1
- package/dist/index.d.ts +28 -19
- package/dist/index.js +5 -3
- package/dist/recorder/index.d.ts +1 -1
- package/dist/recorder/index.js +4 -2
- package/dist/{recorder-CnOKlYY3.d.ts → recorder-xL-5Vfbu.d.ts} +14 -1
- package/dist/shell/index.d.ts +2 -1
- package/dist/shell/index.js +2 -2
- package/dist/{shell-CU4GpGuq.d.ts → shell-BXG_NlvR.d.ts} +28 -3
- package/dist/styles/index.css +224 -0
- package/package.json +5 -4
|
@@ -1521,6 +1521,13 @@ function recorderBitsPerSecond(value) {
|
|
|
1521
1521
|
return Math.round(value * 1e3);
|
|
1522
1522
|
}
|
|
1523
1523
|
|
|
1524
|
+
// src/recorder/recordedMediaKind.ts
|
|
1525
|
+
function recordedMediaKind(source, stream, mimeType) {
|
|
1526
|
+
if (stream) return stream.getVideoTracks().length > 0 ? "video" : "audio";
|
|
1527
|
+
if (mimeType?.toLowerCase().startsWith("audio/")) return "audio";
|
|
1528
|
+
return source === "mic" ? "audio" : "video";
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1524
1531
|
// src/recorder/RecorderModal.tsx
|
|
1525
1532
|
import {
|
|
1526
1533
|
Fragment as Fragment2,
|
|
@@ -2233,6 +2240,7 @@ function RecorderModal({
|
|
|
2233
2240
|
relativePath: screenPath,
|
|
2234
2241
|
filename: screenFilename,
|
|
2235
2242
|
source,
|
|
2243
|
+
mediaKind: "video",
|
|
2236
2244
|
mimeType: recorder.mimeType,
|
|
2237
2245
|
duration,
|
|
2238
2246
|
hasTimingSidecar: false,
|
|
@@ -2257,13 +2265,10 @@ function RecorderModal({
|
|
|
2257
2265
|
setIsSaving(true);
|
|
2258
2266
|
setSaveError(null);
|
|
2259
2267
|
try {
|
|
2260
|
-
const
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
filenameSeed
|
|
2265
|
-
);
|
|
2266
|
-
const relativeName = `${recorder.directory}/${filename}`;
|
|
2268
|
+
const mediaKind = recordedMediaKind(source, recorder.stream, recorder.mimeType);
|
|
2269
|
+
const filename = buildFilename(mediaKind, recorder.extension, basename, filenameSeed);
|
|
2270
|
+
const directory = mediaKind === "audio" ? "audio" : recorder.directory;
|
|
2271
|
+
const relativeName = `${directory}/${filename}`;
|
|
2267
2272
|
const relativePath = await mediaProvider.addMedia(
|
|
2268
2273
|
relativeName,
|
|
2269
2274
|
recorder.blob,
|
|
@@ -2291,6 +2296,7 @@ function RecorderModal({
|
|
|
2291
2296
|
relativePath,
|
|
2292
2297
|
filename,
|
|
2293
2298
|
source,
|
|
2299
|
+
mediaKind,
|
|
2294
2300
|
mimeType: recorder.mimeType,
|
|
2295
2301
|
duration: recorder.durationMs / 1e3,
|
|
2296
2302
|
hasTimingSidecar
|
|
@@ -2331,7 +2337,7 @@ function RecorderModal({
|
|
|
2331
2337
|
},
|
|
2332
2338
|
[recorder.durationMs]
|
|
2333
2339
|
);
|
|
2334
|
-
const isAudioOnly = source === "
|
|
2340
|
+
const isAudioOnly = recordedMediaKind(source, recorder.stream, recorder.mimeType) === "audio";
|
|
2335
2341
|
const showPreview = recorder.state !== "idle" && recorder.state !== "error";
|
|
2336
2342
|
const canRecord = recorder.state === "ready";
|
|
2337
2343
|
const canStop = recorder.state === "recording";
|
|
@@ -2839,6 +2845,7 @@ export {
|
|
|
2839
2845
|
buildRecorderScreenConstraints,
|
|
2840
2846
|
buildRecorderScreenAudioConstraints,
|
|
2841
2847
|
recorderBitsPerSecond,
|
|
2848
|
+
recordedMediaKind,
|
|
2842
2849
|
useModalDialog,
|
|
2843
2850
|
RecorderModal,
|
|
2844
2851
|
RecorderPanel
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel } from './shell-
|
|
2
|
-
export { B as BlockTagVisibility, a as CodeContextSection, D as DocumentLinkCandidate, b as DocumentLinkProvider, c as EditorActions, d as EditorColorScheme, e as EditorContextValue, f as EditorMode, g as EditorProvider, h as EditorProviderProps, i as EditorShell, j as EditorShellProps, k as EditorState, l as EditorView, I as ImageDisplayMode, L as LayoutMode, M as MentionCandidate, m as MentionProvider, P as PreviewPanel, n as PreviewPanelProps, R as RawEditor, o as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, W as WriteCanvasSettings, p as WysiwygEditor, q as WysiwygEditorProps, u as useEditorContext } from './shell-
|
|
1
|
+
import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel } from './shell-BXG_NlvR.js';
|
|
2
|
+
export { B as BlockTagVisibility, a as CodeContextSection, D as DocumentLinkCandidate, b as DocumentLinkProvider, c as EditorActions, d as EditorColorScheme, e as EditorContextValue, f as EditorMode, g as EditorProvider, h as EditorProviderProps, i as EditorShell, j as EditorShellProps, k as EditorState, l as EditorView, I as ImageDisplayMode, L as LayoutMode, M as MentionCandidate, m as MentionProvider, P as PreviewPanel, n as PreviewPanelProps, R as RawEditor, o as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, W as WriteCanvasSettings, p as WysiwygEditor, q as WysiwygEditorProps, u as useEditorContext } from './shell-BXG_NlvR.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import * as react from 'react';
|
|
5
5
|
import { ReactNode, CSSProperties } from 'react';
|
|
6
6
|
import { Doc, ScheduledClip, VideoPlacement, VideoPipSize, VideoPipShape, VideoPipPosition, MediaProvider, Theme, CustomTemplateDefinition, ThemeSeedColors, ViewportPreset, ViewportConfig, Block, MediaEntry, DiagramEdgeAnchor } from '@bendyline/squisq/schemas';
|
|
7
7
|
import { ContentContainer } from '@bendyline/squisq/storage';
|
|
8
8
|
export { CanvasRect, ImageEditor, ImageEditorAction, ImageEditorProps, ImageEditorState, ImageEditorTool, ImageViewer, ImageViewerProps, UseImageEditorOptions, UseImageEditorReturn, imageEditorReducer, initialImageEditorState, useImageEditor } from './image-editor/index.js';
|
|
9
|
+
import { CodeBlockCopyHandler, DisplayMode, CaptionStyle, VideoPresentation, PipSize, PipShape, PipPosition } from '@bendyline/squisq-react';
|
|
9
10
|
import { IconFamily } from '@bendyline/squisq/icons';
|
|
10
|
-
import {
|
|
11
|
+
import { CoverSlideTemplate, CoverSlidePlayback, ConnectorRouting, AsciiDiagram, Tree, AsciiTimeline, AsciiTimelineSide, AsciiTimelineMarker } from '@bendyline/squisq/doc';
|
|
11
12
|
import { MarkdownWrapState } from '@bendyline/squisq/markdown';
|
|
12
13
|
import * as monaco_editor from 'monaco-editor';
|
|
13
14
|
import { M as MonacoLanguageRequest, a as MonacoLanguageLoadOptions } from './monacoLanguageDetection-DEyUW-BS.js';
|
|
14
15
|
export { MonacoWorkerConstructor, MonacoWorkerConstructors, configureMonacoWorkers } from './monaco-workers/index.js';
|
|
15
|
-
import { ConnectorRouting, AsciiDiagram, Tree, AsciiTimeline, AsciiTimelineSide, AsciiTimelineMarker } from '@bendyline/squisq/doc';
|
|
16
16
|
import * as _tiptap_core from '@tiptap/core';
|
|
17
17
|
import { Extension } from '@tiptap/core';
|
|
18
18
|
import * as _tiptap_extension_heading from '@tiptap/extension-heading';
|
|
@@ -22,7 +22,7 @@ import { PluginKey } from '@tiptap/pm/state';
|
|
|
22
22
|
import { Node } from '@tiptap/pm/model';
|
|
23
23
|
import { RenderResult } from 'mermaid';
|
|
24
24
|
export { JsonEditor, JsonEditorProps } from './json-editor/index.js';
|
|
25
|
-
export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as
|
|
25
|
+
export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as RecordedMediaKind, b as RecorderAudioDeviceSettings, c as RecorderButton, d as RecorderButtonProps, e as RecorderCameraDeviceSettings, f as RecorderCameraSaveResult, g as RecorderColorScheme, h as RecorderConstraintMode, i as RecorderDeviceSettings, j as RecorderDeviceSettingsPanel, k as RecorderDeviceSettingsPanelProps, l as RecorderEncodingSettings, m as RecorderModal, n as RecorderModalProps, o as RecorderNarrationOptions, p as RecorderPanel, q as RecorderPanelProps, r as RecorderSaveResult, s as RecorderScreenAudioSettings, t as RecorderScreenDeviceSettings, S as ScreenStreamHandle, u as ScreenStreamOptions, T as TimingJson, v as buildRecorderAudioConstraints, w as buildRecorderCameraConstraints, x as buildRecorderScreenAudioConstraints, y as buildRecorderScreenConstraints, z as buildTimingJson, A as encodeTimingJson, B as recordedMediaKind, E as recorderBitsPerSecond, F as requestCameraStream, G as requestMicStream, H as requestScreenStream, I as timingPathFor, J as useStreamPreview } from './recorder-xL-5Vfbu.js';
|
|
26
26
|
export { C as CanvasSink, a as CaptureKind, D as DEFAULT_TELEPROMPTER_PREFS, F as FloatOpenOptions, b as FloatTier, c as FloatingWindowHandle, d as FloatingWindowManager, M as MicAnalysisHandle, e as MicAnalysisStatus, N as NarrationRecorderController, f as NarrationRecorderState, g as NarrationStageHandle, h as NarrationTake, P as PrompterTransport, R as RecorderAudioBitrateMode, i as RecorderCameraLane, j as RecorderExtendedMediaOptions, k as RecorderSource, l as RecorderState, m as ResolvedFormat, T as TeleprompterController, n as TeleprompterPrefs, o as TeleprompterRecordingDeps, U as UseMediaRecorderOptions, p as UseMediaRecorderResult, q as UseNarrationStageOptions, r as buildFilename, s as createFloatingWindowManager, t as detectFloatTiers, u as getCaptureKind, v as resolveFormat, w as supportsDisplayMedia, x as supportsMediaRecorder, y as supportsUserMedia, z as useFloatingWindow, A as useMediaRecorder, B as useMicAnalysis, E as useNarrationRecorder, G as useNarrationStage, H as useTeleprompter, I as vadConfigForSensitivity } from './useNarrationStage-Bk3mdW75.js';
|
|
27
27
|
export { EYE_LINE_FRACTION, NarrationSavePlan, NarrationSaveResult, NarrationStage, NarrationStageProps, PCM_WORKLET_NAME, PCM_WORKLET_SOURCE, TELEPROMPTER_CSS, TeleprompterControls, TeleprompterControlsProps, TeleprompterSurface, TeleprompterSurfaceProps, TeleprompterView, TeleprompterViewProps, TokenLineMap, buildNarrationSavePlan, cameraVideoLine, ensureTeleprompterStyles, executeNarrationSave, insertNarrationPreamble, measureTokenLines, narrationAnnotationLine, prompterVarsFromTheme, registerPcmWorklet, stepScroll, targetOffsetFor } from './teleprompter/index.js';
|
|
28
28
|
import '@bendyline/squisq/versions';
|
|
@@ -471,8 +471,12 @@ interface PlainHtmlPreviewProps {
|
|
|
471
471
|
* Return `false` to allow the iframe's default navigation.
|
|
472
472
|
*/
|
|
473
473
|
onLinkClick?: (href: string) => boolean | undefined;
|
|
474
|
+
/** Show a Copy button on ordinary fenced code blocks (default: false). */
|
|
475
|
+
showCodeCopyButton?: boolean;
|
|
476
|
+
/** Optional host clipboard adapter; otherwise the browser Clipboard API is used. */
|
|
477
|
+
onCopyCode?: CodeBlockCopyHandler;
|
|
474
478
|
}
|
|
475
|
-
declare function PlainHtmlPreview({ markdown, title, images, mediaProvider, mediaRevision, theme, className, style, globalKeyboardShortcuts, onFrameChange, onLinkClick, }: PlainHtmlPreviewProps): react_jsx_runtime.JSX.Element;
|
|
479
|
+
declare function PlainHtmlPreview({ markdown, title, images, mediaProvider, mediaRevision, theme, className, style, globalKeyboardShortcuts, onFrameChange, onLinkClick, showCodeCopyButton, onCopyCode, }: PlainHtmlPreviewProps): react_jsx_runtime.JSX.Element;
|
|
476
480
|
|
|
477
481
|
/**
|
|
478
482
|
* Emoji Dataset
|
|
@@ -826,6 +830,12 @@ interface PreviewSettings {
|
|
|
826
830
|
activeCoverSlide: boolean;
|
|
827
831
|
/** Enable/disable the managed cover slide. */
|
|
828
832
|
setCoverSlideEnabled: (enabled: boolean) => void;
|
|
833
|
+
activeCoverSlideTemplate: CoverSlideTemplate;
|
|
834
|
+
setCoverSlideTemplate: (template: CoverSlideTemplate) => void;
|
|
835
|
+
activeCoverSlideDuration: number;
|
|
836
|
+
setCoverSlideDuration: (duration: number) => void;
|
|
837
|
+
activeCoverSlidePlayback: CoverSlidePlayback;
|
|
838
|
+
setCoverSlidePlayback: (playback: CoverSlidePlayback) => void;
|
|
829
839
|
/** Whether Video mode restarts automatically when playback ends. */
|
|
830
840
|
activeVideoLoop: boolean;
|
|
831
841
|
/** Enable/disable automatic Video-mode playback restart. */
|
|
@@ -873,18 +883,6 @@ interface PreviewSettingsProviderProps {
|
|
|
873
883
|
themeOverride?: Theme | null;
|
|
874
884
|
}
|
|
875
885
|
declare function PreviewSettingsProvider({ doc, children, defaultViewportPreset, themeOverride, }: PreviewSettingsProviderProps): react_jsx_runtime.JSX.Element;
|
|
876
|
-
/**
|
|
877
|
-
* Inline preview controls rendered in the main toolbar row.
|
|
878
|
-
*
|
|
879
|
-
* Collapse is *progressive* (a priority-plus pattern): rather than switch the
|
|
880
|
-
* whole row in and out at a fixed window-width breakpoint, the controls
|
|
881
|
-
* measure how many of them actually fit in the width the toolbar gives them
|
|
882
|
-
* and keep that many inline, folding the rest — from the low-priority end of
|
|
883
|
-
* {@link CONTROL_KEYS} — into a single ellipsis button's popover. As
|
|
884
|
-
* the toolbar widens or narrows, controls migrate one at a time between the
|
|
885
|
-
* inline row and the menu, so the available space is always well used and the
|
|
886
|
-
* row never wraps onto a second line.
|
|
887
|
-
*/
|
|
888
886
|
interface PreviewToolbarControlsProps {
|
|
889
887
|
/**
|
|
890
888
|
* Display mode whose applicable control set should be rendered. Defaults to
|
|
@@ -956,6 +954,17 @@ interface ToolbarProps {
|
|
|
956
954
|
* editing free-form prompts — can pass false to suppress it.
|
|
957
955
|
*/
|
|
958
956
|
showPlayTab?: boolean;
|
|
957
|
+
/**
|
|
958
|
+
* Whether to render Squisq's built-in text, block, and contextual
|
|
959
|
+
* formatting controls. The toolbar, Insert menu, view tabs, and host slots
|
|
960
|
+
* remain mounted when false. Defaults to true.
|
|
961
|
+
*/
|
|
962
|
+
showFormattingControls?: boolean;
|
|
963
|
+
/**
|
|
964
|
+
* Whether to render Squisq's built-in Insert button and menu independently
|
|
965
|
+
* of the formatting controls. Defaults to true.
|
|
966
|
+
*/
|
|
967
|
+
showInsertControls?: boolean;
|
|
959
968
|
/**
|
|
960
969
|
* Semantic embedding mode inherited from EditorShell. Chat mode exposes
|
|
961
970
|
* only the Write surface, which suppresses the view tabs and their
|
|
@@ -968,7 +977,7 @@ interface ToolbarProps {
|
|
|
968
977
|
* - WYSIWYG: calls Tiptap chain commands (toggleBold, etc.)
|
|
969
978
|
* - Raw: appends markdown syntax to the source
|
|
970
979
|
*/
|
|
971
|
-
declare function Toolbar({ className, showFiles, fileCount, onToggleFiles, slotLeft, slotAfterTabs, slotAfterActions, slotRight, showPlayTab, hostMode, }: ToolbarProps): react_jsx_runtime.JSX.Element;
|
|
980
|
+
declare function Toolbar({ className, showFiles, fileCount, onToggleFiles, slotLeft, slotAfterTabs, slotAfterActions, slotRight, showPlayTab, showFormattingControls, showInsertControls, hostMode, }: ToolbarProps): react_jsx_runtime.JSX.Element;
|
|
972
981
|
|
|
973
982
|
/**
|
|
974
983
|
* VersionHistoryPanel
|
package/dist/index.js
CHANGED
|
@@ -194,7 +194,7 @@ import {
|
|
|
194
194
|
usePreviewSettings,
|
|
195
195
|
useTimelineData,
|
|
196
196
|
useTreeViewData
|
|
197
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-5FG3NAPH.js";
|
|
198
198
|
import "./chunk-V4NBQF5C.js";
|
|
199
199
|
import {
|
|
200
200
|
JsonEditor
|
|
@@ -212,7 +212,7 @@ import {
|
|
|
212
212
|
} from "./chunk-V44VP242.js";
|
|
213
213
|
import {
|
|
214
214
|
RecorderButton
|
|
215
|
-
} from "./chunk-
|
|
215
|
+
} from "./chunk-WH3DL6TG.js";
|
|
216
216
|
import {
|
|
217
217
|
DEFAULT_RECORDER_DEVICE_SETTINGS,
|
|
218
218
|
RecorderDeviceSettingsPanel,
|
|
@@ -223,10 +223,11 @@ import {
|
|
|
223
223
|
buildRecorderScreenAudioConstraints,
|
|
224
224
|
buildRecorderScreenConstraints,
|
|
225
225
|
getCaptureKind,
|
|
226
|
+
recordedMediaKind,
|
|
226
227
|
recorderBitsPerSecond,
|
|
227
228
|
requestScreenStream,
|
|
228
229
|
useMediaRecorder
|
|
229
|
-
} from "./chunk-
|
|
230
|
+
} from "./chunk-JUAQQTJE.js";
|
|
230
231
|
import "./chunk-GS7QWYFT.js";
|
|
231
232
|
import {
|
|
232
233
|
TeleprompterView
|
|
@@ -865,6 +866,7 @@ export {
|
|
|
865
866
|
readBlockAttrsTransition,
|
|
866
867
|
readBlockAttrsValue,
|
|
867
868
|
readHeadingLineTransition,
|
|
869
|
+
recordedMediaKind,
|
|
868
870
|
recorderBitsPerSecond,
|
|
869
871
|
registerPcmWorklet,
|
|
870
872
|
removeEdgeOp,
|
package/dist/recorder/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as
|
|
1
|
+
export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as RecordedMediaKind, b as RecorderAudioDeviceSettings, c as RecorderButton, d as RecorderButtonProps, e as RecorderCameraDeviceSettings, f as RecorderCameraSaveResult, g as RecorderColorScheme, h as RecorderConstraintMode, i as RecorderDeviceSettings, j as RecorderDeviceSettingsPanel, k as RecorderDeviceSettingsPanelProps, l as RecorderEncodingSettings, m as RecorderModal, n as RecorderModalProps, p as RecorderPanel, q as RecorderPanelProps, r as RecorderSaveResult, s as RecorderScreenAudioSettings, t as RecorderScreenDeviceSettings, S as ScreenStreamHandle, u as ScreenStreamOptions, T as TimingJson, v as buildRecorderAudioConstraints, w as buildRecorderCameraConstraints, x as buildRecorderScreenAudioConstraints, y as buildRecorderScreenConstraints, z as buildTimingJson, A as encodeTimingJson, B as recordedMediaKind, E as recorderBitsPerSecond, F as requestCameraStream, G as requestMicStream, H as requestScreenStream, I as timingPathFor, J as useStreamPreview } from '../recorder-xL-5Vfbu.js';
|
|
2
2
|
export { a as CaptureKind, R as RecorderAudioBitrateMode, i as RecorderCameraLane, j as RecorderExtendedMediaOptions, k as RecorderSource, l as RecorderState, m as ResolvedFormat, U as UseMediaRecorderOptions, p as UseMediaRecorderResult, r as buildFilename, u as getCaptureKind, v as resolveFormat, w as supportsDisplayMedia, x as supportsMediaRecorder, y as supportsUserMedia, A as useMediaRecorder } from '../useNarrationStage-Bk3mdW75.js';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
import '@bendyline/squisq/schemas';
|
package/dist/recorder/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RecorderButton
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-WH3DL6TG.js";
|
|
4
4
|
import {
|
|
5
5
|
DEFAULT_RECORDER_DEVICE_SETTINGS,
|
|
6
6
|
RecorderDeviceSettingsPanel,
|
|
@@ -11,10 +11,11 @@ import {
|
|
|
11
11
|
buildRecorderScreenAudioConstraints,
|
|
12
12
|
buildRecorderScreenConstraints,
|
|
13
13
|
getCaptureKind,
|
|
14
|
+
recordedMediaKind,
|
|
14
15
|
recorderBitsPerSecond,
|
|
15
16
|
requestScreenStream,
|
|
16
17
|
useMediaRecorder
|
|
17
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-JUAQQTJE.js";
|
|
18
19
|
import "../chunk-GS7QWYFT.js";
|
|
19
20
|
import {
|
|
20
21
|
buildFilename,
|
|
@@ -43,6 +44,7 @@ export {
|
|
|
43
44
|
buildTimingJson,
|
|
44
45
|
encodeTimingJson,
|
|
45
46
|
getCaptureKind,
|
|
47
|
+
recordedMediaKind,
|
|
46
48
|
recorderBitsPerSecond,
|
|
47
49
|
requestCameraStream,
|
|
48
50
|
requestMicStream,
|
|
@@ -4,6 +4,17 @@ import { ContentContainer } from '@bendyline/squisq/storage';
|
|
|
4
4
|
import { k as RecorderSource, o as TeleprompterRecordingDeps } from './useNarrationStage-Bk3mdW75.js';
|
|
5
5
|
import { CSSProperties, RefObject } from 'react';
|
|
6
6
|
|
|
7
|
+
type RecordedMediaKind = 'audio' | 'video';
|
|
8
|
+
/**
|
|
9
|
+
* Classify the file that was actually recorded.
|
|
10
|
+
*
|
|
11
|
+
* The acquired stream is authoritative when it is still available: a browser
|
|
12
|
+
* can negotiate a `video/webm` container even when the stream contains only
|
|
13
|
+
* audio. MIME and requested source are retained as fallbacks for hosts that
|
|
14
|
+
* construct a save result without exposing the stream.
|
|
15
|
+
*/
|
|
16
|
+
declare function recordedMediaKind(source: RecorderSource, stream: Pick<MediaStream, 'getVideoTracks'> | null, mimeType: string | null | undefined): RecordedMediaKind;
|
|
17
|
+
|
|
7
18
|
type RecorderColorScheme = 'light' | 'dark';
|
|
8
19
|
/**
|
|
9
20
|
* Everything narration mode needs beyond the base recorder props. Supplying
|
|
@@ -78,6 +89,8 @@ interface RecorderSaveResult {
|
|
|
78
89
|
filename: string;
|
|
79
90
|
/** Capture source the user picked. */
|
|
80
91
|
source: RecorderSource;
|
|
92
|
+
/** Media kind detected from the tracks that were actually recorded. */
|
|
93
|
+
mediaKind: RecordedMediaKind;
|
|
81
94
|
/** MIME type of the saved blob. */
|
|
82
95
|
mimeType: string;
|
|
83
96
|
/** Recording length in seconds. */
|
|
@@ -399,4 +412,4 @@ declare function encodeTimingJson(timing: TimingJson): Uint8Array;
|
|
|
399
412
|
*/
|
|
400
413
|
declare function timingPathFor(audioRelativePath: string): string;
|
|
401
414
|
|
|
402
|
-
export {
|
|
415
|
+
export { encodeTimingJson as A, recordedMediaKind as B, type CameraStreamOptions as C, DEFAULT_RECORDER_DEVICE_SETTINGS as D, recorderBitsPerSecond as E, requestCameraStream as F, requestMicStream as G, requestScreenStream as H, timingPathFor as I, useStreamPreview as J, type RecordedBookmark as R, type ScreenStreamHandle as S, type TimingJson as T, type RecordedMediaKind as a, type RecorderAudioDeviceSettings as b, RecorderButton as c, type RecorderButtonProps as d, type RecorderCameraDeviceSettings as e, type RecorderCameraSaveResult as f, type RecorderColorScheme as g, type RecorderConstraintMode as h, type RecorderDeviceSettings as i, RecorderDeviceSettingsPanel as j, type RecorderDeviceSettingsPanelProps as k, type RecorderEncodingSettings as l, RecorderModal as m, type RecorderModalProps as n, type RecorderNarrationOptions as o, RecorderPanel as p, type RecorderPanelProps as q, type RecorderSaveResult as r, type RecorderScreenAudioSettings as s, type RecorderScreenDeviceSettings as t, type ScreenStreamOptions as u, buildRecorderAudioConstraints as v, buildRecorderCameraConstraints as w, buildRecorderScreenAudioConstraints as x, buildRecorderScreenConstraints as y, buildTimingJson as z };
|
package/dist/shell/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { B as BlockTagVisibility, D as DocumentLinkCandidate, b as DocumentLinkProvider, c as EditorActions, d as EditorColorScheme, e as EditorContextValue, E as EditorHostMode, f as EditorMode, g as EditorProvider, h as EditorProviderProps, i as EditorShell, j as EditorShellProps, k as EditorState, l as EditorView, I as ImageDisplayMode, L as LayoutMode, M as MentionCandidate, m as MentionProvider, P as PreviewPanel, n as PreviewPanelProps, R as RawEditor, o as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, p as WysiwygEditor, q as WysiwygEditorProps, u as useEditorContext } from '../shell-
|
|
1
|
+
export { B as BlockTagVisibility, D as DocumentLinkCandidate, b as DocumentLinkProvider, c as EditorActions, d as EditorColorScheme, e as EditorContextValue, E as EditorHostMode, f as EditorMode, g as EditorProvider, h as EditorProviderProps, i as EditorShell, j as EditorShellProps, k as EditorState, l as EditorView, I as ImageDisplayMode, L as LayoutMode, M as MentionCandidate, m as MentionProvider, P as PreviewPanel, n as PreviewPanelProps, R as RawEditor, o as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, p as WysiwygEditor, q as WysiwygEditorProps, u as useEditorContext } from '../shell-BXG_NlvR.js';
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@bendyline/squisq/schemas';
|
|
@@ -7,3 +7,4 @@ import '@bendyline/squisq/storage';
|
|
|
7
7
|
import '@bendyline/squisq/versions';
|
|
8
8
|
import '@tiptap/core';
|
|
9
9
|
import 'monaco-editor';
|
|
10
|
+
import '@bendyline/squisq-react';
|
package/dist/shell/index.js
CHANGED
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
RawEditor,
|
|
6
6
|
WysiwygEditor,
|
|
7
7
|
useEditorContext
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-5FG3NAPH.js";
|
|
9
9
|
import "../chunk-V4NBQF5C.js";
|
|
10
10
|
import "../chunk-K2WJYVS4.js";
|
|
11
11
|
import "../chunk-V44VP242.js";
|
|
12
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-JUAQQTJE.js";
|
|
13
13
|
import "../chunk-GS7QWYFT.js";
|
|
14
14
|
import "../chunk-IQFPX2CE.js";
|
|
15
15
|
import "../chunk-OWOKKZAU.js";
|
|
@@ -6,6 +6,7 @@ import { ContentContainer } from '@bendyline/squisq/storage';
|
|
|
6
6
|
import { DocumentVersionManager, SaveVersionOptions, SaveVersionResult, PrunePolicy } from '@bendyline/squisq/versions';
|
|
7
7
|
import { Editor } from '@tiptap/core';
|
|
8
8
|
import { editor } from 'monaco-editor';
|
|
9
|
+
import { CodeBlockCopyHandler } from '@bendyline/squisq-react';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Configuration a Scene host (diagram / drawing / layout widget) supplies
|
|
@@ -671,7 +672,8 @@ interface EditorShellProps {
|
|
|
671
672
|
* Semantic mode for the surface embedding the editor. `'document'`
|
|
672
673
|
* (default) exposes the normal multi-view authoring shell. `'chat'`
|
|
673
674
|
* starts and stays in Write view through the shell's own controls, hides
|
|
674
|
-
* the view tabs,
|
|
675
|
+
* the view tabs, hides formatting controls by default while retaining the
|
|
676
|
+
* Insert menu, and removes document-level layout, transform, view, and
|
|
675
677
|
* settings controls from the toolbar.
|
|
676
678
|
*/
|
|
677
679
|
hostMode?: EditorHostMode;
|
|
@@ -693,6 +695,13 @@ interface EditorShellProps {
|
|
|
693
695
|
* navigation; any other return (or void) marks the link as handled.
|
|
694
696
|
*/
|
|
695
697
|
onLinkClick?: (href: string) => boolean | undefined;
|
|
698
|
+
/** Show a Copy button on ordinary fenced code blocks (default: false). */
|
|
699
|
+
showCodeCopyButton?: boolean;
|
|
700
|
+
/**
|
|
701
|
+
* Optional host clipboard adapter. When omitted, enabled controls use the
|
|
702
|
+
* browser Clipboard API. Electron/native hosts can bridge copying here.
|
|
703
|
+
*/
|
|
704
|
+
onCopyCode?: CodeBlockCopyHandler;
|
|
696
705
|
/**
|
|
697
706
|
* Light/dark chrome color scheme for the editor shell — toolbar, tabs,
|
|
698
707
|
* status bar, and side panes (default: `'light'`). This is the editor's
|
|
@@ -768,6 +777,18 @@ interface EditorShellProps {
|
|
|
768
777
|
onSaveVersion?: (result: SaveVersionResult) => void;
|
|
769
778
|
/** Show the Files toggle in the toolbar. Defaults to true when mediaProvider is passed. */
|
|
770
779
|
showFilesToggle?: boolean;
|
|
780
|
+
/**
|
|
781
|
+
* Show the toolbar's built-in text, block, and contextual formatting
|
|
782
|
+
* controls. The toolbar, Insert menu, and host-provided slots remain
|
|
783
|
+
* visible when false. Defaults to true in document mode and false in chat
|
|
784
|
+
* mode.
|
|
785
|
+
*/
|
|
786
|
+
showFormattingControls?: boolean;
|
|
787
|
+
/**
|
|
788
|
+
* Show the toolbar's built-in Insert button and menu independently of the
|
|
789
|
+
* formatting controls. Defaults to true.
|
|
790
|
+
*/
|
|
791
|
+
showInsertControls?: boolean;
|
|
771
792
|
/**
|
|
772
793
|
* Whether the Files panel offers browser downloads for its binary entries.
|
|
773
794
|
* Defaults to true. Pass false to remove the built-in download affordance.
|
|
@@ -1065,7 +1086,7 @@ interface EditorShellProps {
|
|
|
1065
1086
|
* Complete markdown editor shell with toolbar, view switcher, and three
|
|
1066
1087
|
* editing modes: Raw (Monaco), WYSIWYG (Tiptap), and Preview.
|
|
1067
1088
|
*/
|
|
1068
|
-
declare function EditorShell({ initialMarkdown, initialView, hostMode, defaultViewportPreset, articleId, basePath, onChange, onLinkClick, colorScheme, className, height, minHeight, maxHeight, mediaProvider, workspaceContainer, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, showFilesToggle, allowBinaryDownloads, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, statusBarSlotRight, showPlayTab, allowPresentationWindow, allowPresentationFullscreen, allowPrint, submitOnEnter, codeContext, fullWidth, uxFont, thinMargins, writeCanvasSettings, showStatusBar, imageDisplayMode, fileName, language, findMode, onFindModeChange, mentionProvider, documentLinkProvider, linkSchemes, allowRecording, allowNarrate, preserveSourceWrapping, placeholder, readOnly, imageSrc, imageAlt, imageMode, imageEditorContainer, onImageExport, inlinePreview, inlinePreviewWidth, outline, outlineWidth, blockTags, blockTagVisibility, themeInheritance, viewPreferences, onViewPreferencesChange, themeOverride, }: EditorShellProps): react_jsx_runtime.JSX.Element;
|
|
1089
|
+
declare function EditorShell({ initialMarkdown, initialView, hostMode, defaultViewportPreset, articleId, basePath, onChange, onLinkClick, showCodeCopyButton, onCopyCode, colorScheme, className, height, minHeight, maxHeight, mediaProvider, workspaceContainer, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, showFilesToggle, showFormattingControls, showInsertControls, allowBinaryDownloads, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, statusBarSlotRight, showPlayTab, allowPresentationWindow, allowPresentationFullscreen, allowPrint, submitOnEnter, codeContext, fullWidth, uxFont, thinMargins, writeCanvasSettings, showStatusBar, imageDisplayMode, fileName, language, findMode, onFindModeChange, mentionProvider, documentLinkProvider, linkSchemes, allowRecording, allowNarrate, preserveSourceWrapping, placeholder, readOnly, imageSrc, imageAlt, imageMode, imageEditorContainer, onImageExport, inlinePreview, inlinePreviewWidth, outline, outlineWidth, blockTags, blockTagVisibility, themeInheritance, viewPreferences, onViewPreferencesChange, themeOverride, }: EditorShellProps): react_jsx_runtime.JSX.Element;
|
|
1069
1090
|
|
|
1070
1091
|
/**
|
|
1071
1092
|
* RawEditor
|
|
@@ -1143,12 +1164,16 @@ interface PreviewPanelProps {
|
|
|
1143
1164
|
workspaceContainer?: ContentContainer | null;
|
|
1144
1165
|
/** Delegate authored link activation to the embedding host. */
|
|
1145
1166
|
onLinkClick?: (href: string) => boolean | undefined;
|
|
1167
|
+
/** Show a Copy button on ordinary fenced code blocks (default: false). */
|
|
1168
|
+
showCodeCopyButton?: boolean;
|
|
1169
|
+
/** Optional host clipboard adapter; otherwise the browser Clipboard API is used. */
|
|
1170
|
+
onCopyCode?: CodeBlockCopyHandler;
|
|
1146
1171
|
}
|
|
1147
1172
|
/**
|
|
1148
1173
|
* Live preview panel that renders the current document as a slideshow
|
|
1149
1174
|
* or document view. Controls (viewport, mode, theme, transform, captions)
|
|
1150
1175
|
* are rendered in the main toolbar via PreviewToolbarControls.
|
|
1151
1176
|
*/
|
|
1152
|
-
declare function PreviewPanel({ basePath, className, workspaceContainer, onLinkClick, }: PreviewPanelProps): react_jsx_runtime.JSX.Element;
|
|
1177
|
+
declare function PreviewPanel({ basePath, className, workspaceContainer, onLinkClick, showCodeCopyButton, onCopyCode, }: PreviewPanelProps): react_jsx_runtime.JSX.Element;
|
|
1153
1178
|
|
|
1154
1179
|
export { type BlockTagVisibility as B, type CodeContext as C, type DocumentLinkCandidate as D, type EditorHostMode as E, type ImageDisplayMode as I, type LayoutMode as L, type MentionCandidate as M, PreviewPanel as P, RawEditor as R, type SceneTextChannel as S, type ThemeInheritance as T, type ViewPreferences as V, type WriteCanvasSettings as W, type CodeContextSection as a, type DocumentLinkProvider as b, type EditorActions as c, type EditorColorScheme as d, type EditorContextValue as e, type EditorMode as f, EditorProvider as g, type EditorProviderProps as h, EditorShell as i, type EditorShellProps as j, type EditorState as k, type EditorView as l, type MentionProvider as m, type PreviewPanelProps as n, type RawEditorProps as o, WysiwygEditor as p, type WysiwygEditorProps as q, useEditorContext as u };
|
package/dist/styles/index.css
CHANGED
|
@@ -7269,6 +7269,219 @@
|
|
|
7269
7269
|
.squisq-use-mode-menu[data-theme=dark] .squisq-use-mode-menu-check {
|
|
7270
7270
|
color: #93c5fd;
|
|
7271
7271
|
}
|
|
7272
|
+
.squisq-cover-slide-trigger {
|
|
7273
|
+
display: inline-flex;
|
|
7274
|
+
align-items: center;
|
|
7275
|
+
gap: 6px;
|
|
7276
|
+
min-height: 28px;
|
|
7277
|
+
padding: 3px 8px;
|
|
7278
|
+
border: 1px solid var(--squisq-border, #d1d5db);
|
|
7279
|
+
border-radius: 5px;
|
|
7280
|
+
background: var(--squisq-input-bg, #fff);
|
|
7281
|
+
color: var(--squisq-text, #1f2937);
|
|
7282
|
+
font: inherit;
|
|
7283
|
+
font-size: 12px;
|
|
7284
|
+
font-weight: 500;
|
|
7285
|
+
white-space: nowrap;
|
|
7286
|
+
cursor: pointer;
|
|
7287
|
+
}
|
|
7288
|
+
.squisq-cover-slide-trigger:hover,
|
|
7289
|
+
.squisq-cover-slide-trigger--open {
|
|
7290
|
+
border-color: var(--squisq-accent, #2563eb);
|
|
7291
|
+
background: var(--squisq-hover-bg, var(--squisq-bg, #f3f4f6));
|
|
7292
|
+
}
|
|
7293
|
+
.squisq-cover-slide-status {
|
|
7294
|
+
display: inline-flex;
|
|
7295
|
+
align-items: center;
|
|
7296
|
+
justify-content: center;
|
|
7297
|
+
width: 15px;
|
|
7298
|
+
height: 15px;
|
|
7299
|
+
border-radius: 50%;
|
|
7300
|
+
background: var(--squisq-border, #d1d5db);
|
|
7301
|
+
color: var(--squisq-text-muted, #6b7280);
|
|
7302
|
+
font-size: 8px;
|
|
7303
|
+
}
|
|
7304
|
+
.squisq-cover-slide-status--enabled {
|
|
7305
|
+
background: var(--squisq-accent, #2563eb);
|
|
7306
|
+
color: var(--squisq-text-on-accent, #fff);
|
|
7307
|
+
}
|
|
7308
|
+
.squisq-cover-slide-menu {
|
|
7309
|
+
--cover-bg: #fff;
|
|
7310
|
+
--cover-control: #fff;
|
|
7311
|
+
--cover-border: #d1d5db;
|
|
7312
|
+
--cover-text: #1f2937;
|
|
7313
|
+
--cover-muted: #6b7280;
|
|
7314
|
+
position: fixed;
|
|
7315
|
+
z-index: 120;
|
|
7316
|
+
box-sizing: border-box;
|
|
7317
|
+
width: min(336px, calc(100vw - 16px));
|
|
7318
|
+
padding: 14px;
|
|
7319
|
+
border: 1px solid var(--cover-border);
|
|
7320
|
+
border-radius: 8px;
|
|
7321
|
+
background: var(--cover-bg);
|
|
7322
|
+
color: var(--cover-text);
|
|
7323
|
+
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.2);
|
|
7324
|
+
font-family:
|
|
7325
|
+
system-ui,
|
|
7326
|
+
-apple-system,
|
|
7327
|
+
sans-serif;
|
|
7328
|
+
color-scheme: light;
|
|
7329
|
+
}
|
|
7330
|
+
.squisq-cover-slide-menu[data-theme=dark] {
|
|
7331
|
+
--cover-bg: #111827;
|
|
7332
|
+
--cover-control: #0f172a;
|
|
7333
|
+
--cover-border: #475569;
|
|
7334
|
+
--cover-text: #f8fafc;
|
|
7335
|
+
--cover-muted: #94a3b8;
|
|
7336
|
+
color-scheme: dark;
|
|
7337
|
+
}
|
|
7338
|
+
.squisq-cover-slide-menu-heading,
|
|
7339
|
+
.squisq-cover-slide-field > span {
|
|
7340
|
+
display: flex;
|
|
7341
|
+
align-items: center;
|
|
7342
|
+
justify-content: space-between;
|
|
7343
|
+
gap: 12px;
|
|
7344
|
+
}
|
|
7345
|
+
.squisq-cover-slide-menu-heading {
|
|
7346
|
+
margin-bottom: 14px;
|
|
7347
|
+
font-size: 14px;
|
|
7348
|
+
font-weight: 700;
|
|
7349
|
+
}
|
|
7350
|
+
.squisq-cover-slide-switch {
|
|
7351
|
+
display: inline-flex;
|
|
7352
|
+
align-items: center;
|
|
7353
|
+
gap: 6px;
|
|
7354
|
+
font-size: 12px;
|
|
7355
|
+
font-weight: 500;
|
|
7356
|
+
cursor: pointer;
|
|
7357
|
+
}
|
|
7358
|
+
.squisq-cover-slide-switch input,
|
|
7359
|
+
.squisq-cover-slide-timing input {
|
|
7360
|
+
accent-color: var(--squisq-accent, #2563eb);
|
|
7361
|
+
}
|
|
7362
|
+
.squisq-cover-slide-preview {
|
|
7363
|
+
display: flex;
|
|
7364
|
+
align-items: center;
|
|
7365
|
+
justify-content: center;
|
|
7366
|
+
box-sizing: border-box;
|
|
7367
|
+
margin: 0 0 12px;
|
|
7368
|
+
overflow: hidden;
|
|
7369
|
+
border: 1px solid var(--cover-border);
|
|
7370
|
+
border-radius: 6px;
|
|
7371
|
+
background: var(--cover-control);
|
|
7372
|
+
}
|
|
7373
|
+
.squisq-cover-slide-preview--disabled {
|
|
7374
|
+
opacity: 0.45;
|
|
7375
|
+
}
|
|
7376
|
+
.squisq-cover-slide-preview-frame {
|
|
7377
|
+
display: flex;
|
|
7378
|
+
width: 100%;
|
|
7379
|
+
height: 100%;
|
|
7380
|
+
}
|
|
7381
|
+
.squisq-cover-slide-preview-frame .block-svg {
|
|
7382
|
+
display: block;
|
|
7383
|
+
width: 100%;
|
|
7384
|
+
height: 100%;
|
|
7385
|
+
}
|
|
7386
|
+
.squisq-cover-slide-preview-empty {
|
|
7387
|
+
margin: 0;
|
|
7388
|
+
padding: 10px 14px;
|
|
7389
|
+
color: var(--cover-muted);
|
|
7390
|
+
font-size: 11px;
|
|
7391
|
+
line-height: 1.4;
|
|
7392
|
+
text-align: center;
|
|
7393
|
+
}
|
|
7394
|
+
.squisq-cover-slide-field {
|
|
7395
|
+
display: grid;
|
|
7396
|
+
gap: 6px;
|
|
7397
|
+
margin-bottom: 10px;
|
|
7398
|
+
color: var(--cover-text);
|
|
7399
|
+
font-size: 12px;
|
|
7400
|
+
font-weight: 600;
|
|
7401
|
+
}
|
|
7402
|
+
.squisq-cover-slide-field select {
|
|
7403
|
+
box-sizing: border-box;
|
|
7404
|
+
width: 100%;
|
|
7405
|
+
min-height: 34px;
|
|
7406
|
+
padding: 5px 8px;
|
|
7407
|
+
border: 1px solid var(--cover-border);
|
|
7408
|
+
border-radius: 4px;
|
|
7409
|
+
background: var(--cover-control);
|
|
7410
|
+
color: var(--cover-text);
|
|
7411
|
+
font: inherit;
|
|
7412
|
+
}
|
|
7413
|
+
.squisq-cover-slide-field output {
|
|
7414
|
+
color: var(--cover-muted);
|
|
7415
|
+
font-variant-numeric: tabular-nums;
|
|
7416
|
+
font-weight: 500;
|
|
7417
|
+
}
|
|
7418
|
+
.squisq-cover-slide-field input[type=range] {
|
|
7419
|
+
width: 100%;
|
|
7420
|
+
margin: 3px 0;
|
|
7421
|
+
accent-color: var(--squisq-accent, #2563eb);
|
|
7422
|
+
}
|
|
7423
|
+
.squisq-cover-slide-help {
|
|
7424
|
+
min-height: 30px;
|
|
7425
|
+
margin: -4px 0 12px;
|
|
7426
|
+
color: var(--cover-muted);
|
|
7427
|
+
font-size: 11px;
|
|
7428
|
+
line-height: 1.35;
|
|
7429
|
+
}
|
|
7430
|
+
.squisq-cover-slide-timing {
|
|
7431
|
+
display: grid;
|
|
7432
|
+
gap: 7px;
|
|
7433
|
+
margin: 0 0 14px;
|
|
7434
|
+
padding: 10px;
|
|
7435
|
+
border: 1px solid var(--cover-border);
|
|
7436
|
+
border-radius: 5px;
|
|
7437
|
+
}
|
|
7438
|
+
.squisq-cover-slide-timing legend {
|
|
7439
|
+
padding: 0 4px;
|
|
7440
|
+
color: var(--cover-muted);
|
|
7441
|
+
font-size: 11px;
|
|
7442
|
+
font-weight: 700;
|
|
7443
|
+
}
|
|
7444
|
+
.squisq-cover-slide-timing label {
|
|
7445
|
+
display: grid;
|
|
7446
|
+
grid-template-columns: auto 1fr;
|
|
7447
|
+
align-items: start;
|
|
7448
|
+
gap: 8px;
|
|
7449
|
+
font-size: 12px;
|
|
7450
|
+
cursor: pointer;
|
|
7451
|
+
}
|
|
7452
|
+
.squisq-cover-slide-timing label > span {
|
|
7453
|
+
display: grid;
|
|
7454
|
+
gap: 2px;
|
|
7455
|
+
font-weight: 600;
|
|
7456
|
+
}
|
|
7457
|
+
.squisq-cover-slide-timing small {
|
|
7458
|
+
color: var(--cover-muted);
|
|
7459
|
+
font-size: 11px;
|
|
7460
|
+
font-weight: 400;
|
|
7461
|
+
}
|
|
7462
|
+
.squisq-cover-slide-export {
|
|
7463
|
+
display: inline-flex;
|
|
7464
|
+
align-items: center;
|
|
7465
|
+
justify-content: center;
|
|
7466
|
+
gap: 7px;
|
|
7467
|
+
width: 100%;
|
|
7468
|
+
min-height: 34px;
|
|
7469
|
+
border: 1px solid var(--cover-border);
|
|
7470
|
+
border-radius: 5px;
|
|
7471
|
+
background: var(--cover-control);
|
|
7472
|
+
color: var(--cover-text);
|
|
7473
|
+
font: inherit;
|
|
7474
|
+
font-size: 12px;
|
|
7475
|
+
font-weight: 600;
|
|
7476
|
+
cursor: pointer;
|
|
7477
|
+
}
|
|
7478
|
+
.squisq-cover-slide-export:hover:not(:disabled) {
|
|
7479
|
+
border-color: var(--squisq-accent, #2563eb);
|
|
7480
|
+
}
|
|
7481
|
+
.squisq-cover-slide-export:disabled {
|
|
7482
|
+
opacity: 0.55;
|
|
7483
|
+
cursor: not-allowed;
|
|
7484
|
+
}
|
|
7272
7485
|
.squisq-editor-shell[data-outline-visible=true] .squisq-toolbar-view-tabs {
|
|
7273
7486
|
flex-shrink: 0;
|
|
7274
7487
|
min-width: var(--squisq-outline-width, 240px);
|
|
@@ -7595,6 +7808,8 @@
|
|
|
7595
7808
|
z-index: 100;
|
|
7596
7809
|
min-width: 200px;
|
|
7597
7810
|
padding: 4px 0;
|
|
7811
|
+
overflow-y: auto;
|
|
7812
|
+
overscroll-behavior: contain;
|
|
7598
7813
|
font-family: var( --squisq-ux-font, -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif );
|
|
7599
7814
|
background: #fff;
|
|
7600
7815
|
border: 1px solid #e5e7eb;
|
|
@@ -8953,6 +9168,15 @@
|
|
|
8953
9168
|
margin: 0;
|
|
8954
9169
|
border-radius: 0;
|
|
8955
9170
|
}
|
|
9171
|
+
.squisq-wysiwyg-editor .squisq-video-node--audio-only {
|
|
9172
|
+
width: min(100%, 360px);
|
|
9173
|
+
max-width: 360px;
|
|
9174
|
+
background: transparent;
|
|
9175
|
+
}
|
|
9176
|
+
.squisq-wysiwyg-editor .squisq-video-node--audio-only audio {
|
|
9177
|
+
display: block;
|
|
9178
|
+
width: 100%;
|
|
9179
|
+
}
|
|
8956
9180
|
.squisq-editor-shell[data-theme=dark] .squisq-video-placement-toolbar {
|
|
8957
9181
|
border-bottom-color: #374151;
|
|
8958
9182
|
background: #111827;
|