@bendyline/squisq-editor-react 2.5.0 → 2.7.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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RecorderModal
3
- } from "./chunk-ZSQN6IO7.js";
3
+ } from "./chunk-JUAQQTJE.js";
4
4
 
5
5
  // src/recorder/RecorderButton.tsx
6
6
  import { useCallback, useState } from "react";
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel } from './shell-CU4GpGuq.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-CU4GpGuq.js';
1
+ import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel } from './shell-595XbANu.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-595XbANu.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 { DisplayMode, CaptionStyle, VideoPresentation, PipSize, PipShape, PipPosition } from '@bendyline/squisq-react';
11
11
  import { CoverSlideTemplate, CoverSlidePlayback, ConnectorRouting, AsciiDiagram, Tree, AsciiTimeline, AsciiTimelineSide, AsciiTimelineMarker } from '@bendyline/squisq/doc';
12
12
  import { MarkdownWrapState } from '@bendyline/squisq/markdown';
13
13
  import * as monaco_editor from 'monaco-editor';
@@ -18,11 +18,12 @@ import { Extension } from '@tiptap/core';
18
18
  import * as _tiptap_extension_heading from '@tiptap/extension-heading';
19
19
  import { DecorationSet } from '@tiptap/pm/view';
20
20
  import { Editor } from '@tiptap/react';
21
- import { PluginKey } from '@tiptap/pm/state';
21
+ import { Transaction, PluginKey } from '@tiptap/pm/state';
22
22
  import { Node } from '@tiptap/pm/model';
23
23
  import { RenderResult } from 'mermaid';
24
+ import { FenceRendererMap } from '@bendyline/squisq/fence';
24
25
  export { JsonEditor, JsonEditorProps } from './json-editor/index.js';
25
- export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as RecorderAudioDeviceSettings, b as RecorderButton, c as RecorderButtonProps, d as RecorderCameraDeviceSettings, e as RecorderCameraSaveResult, f as RecorderColorScheme, g as RecorderConstraintMode, h as RecorderDeviceSettings, i as RecorderDeviceSettingsPanel, j as RecorderDeviceSettingsPanelProps, k as RecorderEncodingSettings, l as RecorderModal, m as RecorderModalProps, n as RecorderNarrationOptions, o as RecorderPanel, p as RecorderPanelProps, q as RecorderSaveResult, r as RecorderScreenAudioSettings, s as RecorderScreenDeviceSettings, S as ScreenStreamHandle, t as ScreenStreamOptions, T as TimingJson, u as buildRecorderAudioConstraints, v as buildRecorderCameraConstraints, w as buildRecorderScreenAudioConstraints, x as buildRecorderScreenConstraints, y as buildTimingJson, z as encodeTimingJson, A as recorderBitsPerSecond, B as requestCameraStream, E as requestMicStream, F as requestScreenStream, G as timingPathFor, H as useStreamPreview } from './recorder-CnOKlYY3.js';
26
+ 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
27
  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
28
  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
29
  import '@bendyline/squisq/versions';
@@ -471,8 +472,12 @@ interface PlainHtmlPreviewProps {
471
472
  * Return `false` to allow the iframe's default navigation.
472
473
  */
473
474
  onLinkClick?: (href: string) => boolean | undefined;
475
+ /** Show a Copy button on ordinary fenced code blocks (default: false). */
476
+ showCodeCopyButton?: boolean;
477
+ /** Optional host clipboard adapter; otherwise the browser Clipboard API is used. */
478
+ onCopyCode?: CodeBlockCopyHandler;
474
479
  }
475
- declare function PlainHtmlPreview({ markdown, title, images, mediaProvider, mediaRevision, theme, className, style, globalKeyboardShortcuts, onFrameChange, onLinkClick, }: PlainHtmlPreviewProps): react_jsx_runtime.JSX.Element;
480
+ declare function PlainHtmlPreview({ markdown, title, images, mediaProvider, mediaRevision, theme, className, style, globalKeyboardShortcuts, onFrameChange, onLinkClick, showCodeCopyButton, onCopyCode, }: PlainHtmlPreviewProps): react_jsx_runtime.JSX.Element;
476
481
 
477
482
  /**
478
483
  * Emoji Dataset
@@ -950,6 +955,17 @@ interface ToolbarProps {
950
955
  * editing free-form prompts — can pass false to suppress it.
951
956
  */
952
957
  showPlayTab?: boolean;
958
+ /**
959
+ * Whether to render Squisq's built-in text, block, and contextual
960
+ * formatting controls. The toolbar, Insert menu, view tabs, and host slots
961
+ * remain mounted when false. Defaults to true.
962
+ */
963
+ showFormattingControls?: boolean;
964
+ /**
965
+ * Whether to render Squisq's built-in Insert button and menu independently
966
+ * of the formatting controls. Defaults to true.
967
+ */
968
+ showInsertControls?: boolean;
953
969
  /**
954
970
  * Semantic embedding mode inherited from EditorShell. Chat mode exposes
955
971
  * only the Write surface, which suppresses the view tabs and their
@@ -962,7 +978,7 @@ interface ToolbarProps {
962
978
  * - WYSIWYG: calls Tiptap chain commands (toggleBold, etc.)
963
979
  * - Raw: appends markdown syntax to the source
964
980
  */
965
- declare function Toolbar({ className, showFiles, fileCount, onToggleFiles, slotLeft, slotAfterTabs, slotAfterActions, slotRight, showPlayTab, hostMode, }: ToolbarProps): react_jsx_runtime.JSX.Element;
981
+ declare function Toolbar({ className, showFiles, fileCount, onToggleFiles, slotLeft, slotAfterTabs, slotAfterActions, slotRight, showPlayTab, showFormattingControls, showInsertControls, hostMode, }: ToolbarProps): react_jsx_runtime.JSX.Element;
966
982
 
967
983
  /**
968
984
  * VersionHistoryPanel
@@ -1734,6 +1750,23 @@ interface FenceBlockEntry {
1734
1750
  /** Document position of the codeBlock node at the current state. */
1735
1751
  pos: number;
1736
1752
  }
1753
+ /**
1754
+ * Remap a family's previous registry entries onto the new document, returning
1755
+ * `mappedPos -> id` for every fence whose identity carries over.
1756
+ *
1757
+ * Two passes:
1758
+ * 1. survivors whose start position was untouched — the common case;
1759
+ * 2. boundary-churn survivors, where an attrs-only `setNodeMarkup` makes
1760
+ * `mapResult` report the start as deleted even though the same block is
1761
+ * still there. Adopt the old id only when a codeBlock sits at the mapped
1762
+ * position, the slot is unclaimed, AND the old node actually survived
1763
+ * (see {@link survivedAsChurn}).
1764
+ *
1765
+ * Callers then walk the new doc: a position present in this map keeps its id
1766
+ * (and may use a lenient re-parse gate); a position absent from it is a NEW
1767
+ * fence that must pass full detection.
1768
+ */
1769
+ declare function mapFenceEntries(tr: Transaction, previous: readonly FenceBlockEntry[], doc: Node): Map<number, string>;
1737
1770
 
1738
1771
  /**
1739
1772
  * AsciiDiagramExtension — Tiptap/ProseMirror plugin that turns code blocks
@@ -2481,9 +2514,19 @@ interface CodeSnippetPluginState {
2481
2514
  interface CodeSnippetExtensionOptions {
2482
2515
  /** When false, leave all ordinary language-tagged fences as code blocks. */
2483
2516
  enabled?: boolean;
2517
+ /**
2518
+ * Fence languages this extension must NOT claim — typically the keys of
2519
+ * a host `FenceRendererMap` so `HostFenceExtension` can own them instead
2520
+ * of every unknown language becoming a Monaco inset. Tokens are
2521
+ * normalized like fence languages (first token, lowercased). Evaluated
2522
+ * at configure time: changing the *set* of registered languages
2523
+ * requires re-configuring the editor; renderer implementations can
2524
+ * change freely behind the host extension's getter.
2525
+ */
2526
+ reservedLanguages?: readonly string[];
2484
2527
  }
2485
2528
  declare const CODE_SNIPPET_KEY: PluginKey<CodeSnippetPluginState>;
2486
- declare function isCodeSnippetNode(node: Node): boolean;
2529
+ declare function isCodeSnippetNode(node: Node, reserved?: ReadonlySet<string>): boolean;
2487
2530
  declare function findCodeSnippetBlockPos(editor: Editor, blockId: string): number | null;
2488
2531
  declare const CodeSnippetExtension: Extension<CodeSnippetExtensionOptions, any>;
2489
2532
 
@@ -2665,6 +2708,94 @@ declare function applyTreeCommand(editor: Editor, blockId: string, cmd: TreeComm
2665
2708
  */
2666
2709
  declare function shouldPasteAsTreeFence(text: string): boolean;
2667
2710
 
2711
+ /**
2712
+ * HostFenceExtension — mounts HOST-registered fence renderers
2713
+ * (`@bendyline/squisq/fence`) inside the WYSIWYG editor.
2714
+ *
2715
+ * Structurally a sibling of TreeViewExtension/CodeSnippetExtension:
2716
+ * position registry with stable synthetic ids, `mapFenceEntries` for
2717
+ * boundary-churn survival, hide-the-fence node decoration + a widget
2718
+ * decoration hosting a React root with `containFenceWidgetEvents`.
2719
+ *
2720
+ * Ownership is simply "the host registry claims this fence language".
2721
+ * The registry is read through a GETTER (the `mentionProvider` pattern)
2722
+ * so renderer implementations can change without remounting the editor;
2723
+ * the *set* of claimed languages is also consulted per-transaction, but
2724
+ * remember to pass the same languages to
2725
+ * `CodeSnippetExtension.reservedLanguages` or Monaco claims them first.
2726
+ *
2727
+ * The fence body is the single source of truth. Renderers receive
2728
+ * `mode: 'edit'` plus a `replaceValue` callback that rewrites the fence
2729
+ * text in one undoable transaction; the info-string meta is NOT provided
2730
+ * (it does not survive the ProseMirror round-trip — payload lives in the
2731
+ * body, see the fence contract docs).
2732
+ */
2733
+
2734
+ type HostFenceBlockEntry = FenceBlockEntry;
2735
+ interface HostFencePluginState {
2736
+ entries: HostFenceBlockEntry[];
2737
+ decorations: DecorationSet;
2738
+ seq: number;
2739
+ }
2740
+ declare const HOST_FENCE_KEY: PluginKey<HostFencePluginState>;
2741
+ interface HostFenceExtensionOptions {
2742
+ /** When false, the extension is inert. */
2743
+ enabled?: boolean;
2744
+ /**
2745
+ * Getter for the host registry — read on every ownership check so
2746
+ * renderer implementations stay live without an editor remount.
2747
+ */
2748
+ renderers?: () => FenceRendererMap | null | undefined;
2749
+ /** Getter for the active theme, forwarded into the render context. */
2750
+ theme?: () => Theme | undefined;
2751
+ }
2752
+ declare function findHostFenceBlockPos(editor: Editor, blockId: string): number | null;
2753
+ /**
2754
+ * Replace a claimed fence's body in one undoable transaction. This is
2755
+ * what backs `FenceRenderContext.replaceValue` in edit mode; exported so
2756
+ * hosts building their own extensions get the same write boundary
2757
+ * (read-only enforcement included) as the built-in fence families.
2758
+ */
2759
+ declare function replaceHostFenceText(editor: Editor, blockId: string, next: string): boolean;
2760
+ declare const HostFenceExtension: Extension<HostFenceExtensionOptions, any>;
2761
+
2762
+ /**
2763
+ * Shared DOM containment for the interactive widgets that the fence-widget
2764
+ * families (ascii diagram, tree, timeline, mermaid) mount over a hidden code
2765
+ * fence via a ProseMirror widget decoration.
2766
+ *
2767
+ * Why this exists: a widget host is `contentEditable="false"` inside a
2768
+ * contentEditable ProseMirror surface, but the real form controls it contains
2769
+ * (`<input>`, `<textarea>`, `<select>`) still bubble their COMPLETE edit
2770
+ * stream up to the editor's DOM. ProseMirror's own handlers sit on
2771
+ * `view.dom`, so a `beforeinput`/`paste`/`compositionend` that originated in
2772
+ * a widget's rename field is ALSO interpreted as text insertion at the
2773
+ * document selection — the user types in the widget and the characters land
2774
+ * in the document. Stopping propagation at the host boundary is what keeps
2775
+ * the two edit surfaces separate.
2776
+ *
2777
+ * `keydown`/`keyup`/`pointerdown`/`mousedown` are contained for the same
2778
+ * reason: they drive ProseMirror's keymap and selection handling.
2779
+ *
2780
+ * This must stay ONE list used by every host — it drifted into three
2781
+ * divergent copies once already (only the timeline stopped the composition /
2782
+ * paste stream, so IME and paste edits leaked out of the diagram and tree
2783
+ * widgets).
2784
+ */
2785
+ /**
2786
+ * Every event a mounted fence widget must keep to itself. Ordered
2787
+ * pointer → key → text-input → composition → clipboard.
2788
+ */
2789
+ declare const FENCE_WIDGET_CONTAINED_EVENTS: readonly ["pointerdown", "mousedown", "keydown", "keyup", "beforeinput", "input", "change", "compositionstart", "compositionupdate", "compositionend", "paste", "cut"];
2790
+ /**
2791
+ * Stop every contained event at `container` so interaction inside a mounted
2792
+ * fence widget never reaches the ProseMirror editor that hosts it.
2793
+ *
2794
+ * Call once, on the host element created by a widget decoration, before
2795
+ * mounting React into it.
2796
+ */
2797
+ declare function containFenceWidgetEvents(container: HTMLElement): void;
2798
+
2668
2799
  /**
2669
2800
  * TimelineViewExtension — mounts a WYSIWYG timeline editor over qualifying
2670
2801
  * authored timeline code fences while keeping the fence text as source of
@@ -2828,4 +2959,4 @@ declare function applyTimelineCommand(editor: Editor, blockId: string, command:
2828
2959
  /** Paste gate for bare, high-confidence Unicode timeline art. */
2829
2960
  declare function shouldPasteAsTimelineFence(text: string): boolean;
2830
2961
 
2831
- export { ALL_PICKER_ENTRIES, type AddTimelineEventOptions, type AddTimelineEventResult, type ApplyAsciiDiagramCommandOptions, type AsciiDiagramBlockEntry, AsciiDiagramExtension, type AsciiDiagramExtensionOptions, type AsciiDiagramPluginState, type AsciiDiagramView, AsciiDiagramWidget, BlockCardView, type BlockCardViewProps, type BlockNavigator, BlockPropertiesPopover, type BlockPropertiesPopoverProps, type BlockRange, type BlockSlice, type BuildPreviewDocOptions, CODE_SNIPPET_KEY, CODE_SNIPPET_LANGUAGES, CodeContext, CodeContextZones, type CodeSnippetBlockEntry, type CodeSnippetData, CodeSnippetExtension, type CodeSnippetExtensionOptions, type CodeSnippetLanguage, type CodeSnippetPluginState, CodeSnippetWidget, type CodeSnippetWidgetProps, type CustomTemplateContextValue, CustomTemplateProvider, type CustomTemplateProviderProps, type CustomThemeContextValue, CustomThemeProvider, type CustomThemeProviderProps, DEFAULT_MERMAID_DIAGRAM_TYPE, DiagramCanvas, type DiagramCommand, type DiagramData, type DiagramEdge, type DiagramNode, type DirectionModel, type DocCustomTemplates, type DocCustomThemes, DocumentSettingsDialog, type DocumentSettingsDialogProps, type DragContentType, type DropTarget, DropZoneOverlay, type DropZoneOverlayProps, EMPTY_TRANSITION, EditorHostMode, EmojiPicker, type EmojiPickerProps, type FileCategory, type FileKind, type FolderEntry, FolderView, type FolderViewProps, type HeadingTransitionAttrs, HeadingWithTemplate, ImportThemeSection, type ImportThemeSectionProps, type ImportedThemeResult, InlinePreviewGutter, type InlinePreviewGutterProps, MERMAID_DIAGRAM_KEY, MERMAID_DIAGRAM_TYPES, MERMAID_FLOWCHART_SHAPES, MediaBin, type MediaBinProps, type MediaClipPatch, type MermaidDiagramBlockEntry, MermaidDiagramCanvas, type MermaidDiagramCanvasProps, type MermaidDiagramCategory, type MermaidDiagramData, MermaidDiagramExtension, type MermaidDiagramExtensionOptions, type MermaidDiagramPluginState, type MermaidDiagramPreview, type MermaidDiagramProperty, type MermaidDiagramType, MermaidDiagramTypeThumbnail, MermaidDiagramWidget, type MermaidDiagramWidgetProps, type MermaidEditCapabilities, type MermaidEditableDiagramKind, type MermaidEditableEdge, type MermaidEditableModel, type MermaidEditableNode, type MermaidEditableText, type MermaidEditableTextTarget, type MermaidFlowchartDirection, type MermaidFlowchartModel, type MermaidFlowchartShape, type MermaidFlowchartShapeId, type MermaidNodeCanvasAction, type MermaidRenderResult, type MermaidSelection, MermaidShapePalette, type MermaidShapePaletteProps, type MermaidSourceEditableModel, MonacoLanguageLoadOptions, MonacoLanguageRequest, OutlinePanel, type OutlinePanelProps, PICKER_CATEGORIES, type PickerCategory, type PickerEntry, PlainHtmlPreview, type PlainHtmlPreviewProps, PreviewFormatSwitch, PreviewModeMenu, PreviewModeSwitch, type PreviewSettings, PreviewSettingsProvider, PreviewToolbarControls, type PreviewToolbarControlsProps, REPAIRABLE_KEY, type RepairableBlockEntry, RepairableDiagramExtension, type RepairableDiagramExtensionOptions, type RepairablePluginState, StatusBar, type StatusBarProps, TIMELINE_VIEW_KEY, TRANSITION_ENTRIES, TRANSITION_GROUPS, TemplatePicker, ThemeCustomizerPanel, type ThemeCustomizerPanelProps, ThemePicker, type ThemePickerProps, type ThemeSaveExtras, type TimelineBlockEntry, type TimelineCommand, type TimelineCommandResult, TimelineCompositionPanel, type TimelineCompositionPanelProps, TimelineEditorWidget, type TimelineEditorWidgetProps, type TimelineEventPatch, TimelineToolbar, type TimelineToolbarProps, TimelineTrack, type TimelineTrackProps, TimelineVideoPanel, type TimelineVideoPanelProps, type TimelineViewData, TimelineViewExtension, type TimelineViewExtensionOptions, type TimelineViewPluginState, Toolbar, type ToolbarProps, TooltipLayer, TransformMenu, type TransitionCatalogEntry, type TransitionFields, type TransitionGroup, TransitionPicker, type TransitionPickerProps, type TreeBlockEntry, type TreeCommand, TreeOutlineWidget, type TreeViewData, TreeViewExtension, type TreeViewExtensionOptions, type TreeViewPluginState, type UseBlockNavigatorOptions, type UseFileDropOptions, type UseFileDropResult, type UseMonacoLoaderResult, VersionHistoryPanel, ViewMenuPanel, ViewSwitcher, type ViewSwitcherProps, type WrapPolicyIngest, addEdgeOp, addItemOp, addNodeOp, addTimelineEventOp, applyAsciiDiagramCommand, applyRepairCommand, applyTimelineCommand, applyTreeCommand, asciiDiagramToCanvas, buildPreviewDoc, classifyFile, codeSnippetFenceLanguageToken, codeSnippetLanguageLabel, codeSnippetMarkdown, detectLanguageFromFileName, documentTitleFromFileName, draftPatchFromImportedTheme, findAsciiDiagramBlockPos, findCodeSnippetBlockPos, findMermaidDiagramBlockPos, findRepairableBlockPos, findTimelineBlockPos, findTransitionEntry, findTreeBlockPos, formatSeconds, getBlockSlices, getTimelineForNode, indentItemOp, ingestForWrite, inspectMermaidSource, isAsciiSourceVisible, isCodeSnippetFenceLanguage, isCodeSnippetNode, isMermaidDiagramNode, isMermaidFlowchartShapeId, isMermaidSourceVisible, isRepairableFence, isTimelineSourceSafeForSemanticEdit, lineToOffset, markdownToTiptap, mermaidDiagramMarkdown, mermaidDiagramProperties, mermaidEditCapabilities, mermaidEditableTexts, mermaidErrorMessage, monacoLanguageForFence, moveItemDownOp, moveItemUpOp, moveNodeOp, nextTimelineEventId, normalizeMermaidFlowchartShape, offsetToLine, outdentItemOp, parseTimelineForNode, partitionFiles, persistFromWrite, preloadMonaco, preloadMonacoSuggestions, processMediaFiles, processTextFile, processTextFiles, readBlockAttrsParams, readBlockAttrsTransition, readBlockAttrsValue, readHeadingLineTransition, removeEdgeOp, removeItemOp, removeNodeOp, removeTimelineEventOp, renameItemOp, renameNodeOp, renderMermaidDiagram, replaceAsciiFenceText, replaceCodeSnippetText, replaceAsciiFenceText as replaceTreeFenceText, resizeNodeOp, resolveFileKind, sanitizeAsciiLabel, sanitizeTimelineText, sanitizeTreeLabel, searchPickerEntries, setBlockAttrsValue, setBlockDurationInSource, setBlockStartTimeInSource, setBlockTransitionInSource, setHeadingAttrsTransition, setHeadingLineTransition, setMediaClipInSource, shouldPasteAsAsciiFence, shouldPasteAsTimelineFence, shouldPasteAsTreeFence, sliceIndexAtOffset, spliceBlock, summarizeBlockProps, templateLabel, tiptapToMarkdown, toggleAsciiSource, toggleDirOp, toggleMermaidSource, transitionLabel, translateDiagramOp, updateTimelineEventOp, useAsciiDiagramData, useBlockNavigator, useCodeSnippetData, useCustomTemplates, useCustomThemes, useDocCustomTemplates, useDocCustomThemes, useFileDrop, useMermaidDiagramData, useMonacoLoader, usePreviewSettings, useTimelineData, useTreeViewData };
2962
+ export { ALL_PICKER_ENTRIES, type AddTimelineEventOptions, type AddTimelineEventResult, type ApplyAsciiDiagramCommandOptions, type AsciiDiagramBlockEntry, AsciiDiagramExtension, type AsciiDiagramExtensionOptions, type AsciiDiagramPluginState, type AsciiDiagramView, AsciiDiagramWidget, BlockCardView, type BlockCardViewProps, type BlockNavigator, BlockPropertiesPopover, type BlockPropertiesPopoverProps, type BlockRange, type BlockSlice, type BuildPreviewDocOptions, CODE_SNIPPET_KEY, CODE_SNIPPET_LANGUAGES, CodeContext, CodeContextZones, type CodeSnippetBlockEntry, type CodeSnippetData, CodeSnippetExtension, type CodeSnippetExtensionOptions, type CodeSnippetLanguage, type CodeSnippetPluginState, CodeSnippetWidget, type CodeSnippetWidgetProps, type CustomTemplateContextValue, CustomTemplateProvider, type CustomTemplateProviderProps, type CustomThemeContextValue, CustomThemeProvider, type CustomThemeProviderProps, DEFAULT_MERMAID_DIAGRAM_TYPE, DiagramCanvas, type DiagramCommand, type DiagramData, type DiagramEdge, type DiagramNode, type DirectionModel, type DocCustomTemplates, type DocCustomThemes, DocumentSettingsDialog, type DocumentSettingsDialogProps, type DragContentType, type DropTarget, DropZoneOverlay, type DropZoneOverlayProps, EMPTY_TRANSITION, EditorHostMode, EmojiPicker, type EmojiPickerProps, FENCE_WIDGET_CONTAINED_EVENTS, type FenceBlockEntry, type FileCategory, type FileKind, type FolderEntry, FolderView, type FolderViewProps, HOST_FENCE_KEY, type HeadingTransitionAttrs, HeadingWithTemplate, type HostFenceBlockEntry, HostFenceExtension, type HostFenceExtensionOptions, type HostFencePluginState, ImportThemeSection, type ImportThemeSectionProps, type ImportedThemeResult, InlinePreviewGutter, type InlinePreviewGutterProps, MERMAID_DIAGRAM_KEY, MERMAID_DIAGRAM_TYPES, MERMAID_FLOWCHART_SHAPES, MediaBin, type MediaBinProps, type MediaClipPatch, type MermaidDiagramBlockEntry, MermaidDiagramCanvas, type MermaidDiagramCanvasProps, type MermaidDiagramCategory, type MermaidDiagramData, MermaidDiagramExtension, type MermaidDiagramExtensionOptions, type MermaidDiagramPluginState, type MermaidDiagramPreview, type MermaidDiagramProperty, type MermaidDiagramType, MermaidDiagramTypeThumbnail, MermaidDiagramWidget, type MermaidDiagramWidgetProps, type MermaidEditCapabilities, type MermaidEditableDiagramKind, type MermaidEditableEdge, type MermaidEditableModel, type MermaidEditableNode, type MermaidEditableText, type MermaidEditableTextTarget, type MermaidFlowchartDirection, type MermaidFlowchartModel, type MermaidFlowchartShape, type MermaidFlowchartShapeId, type MermaidNodeCanvasAction, type MermaidRenderResult, type MermaidSelection, MermaidShapePalette, type MermaidShapePaletteProps, type MermaidSourceEditableModel, MonacoLanguageLoadOptions, MonacoLanguageRequest, OutlinePanel, type OutlinePanelProps, PICKER_CATEGORIES, type PickerCategory, type PickerEntry, PlainHtmlPreview, type PlainHtmlPreviewProps, PreviewFormatSwitch, PreviewModeMenu, PreviewModeSwitch, type PreviewSettings, PreviewSettingsProvider, PreviewToolbarControls, type PreviewToolbarControlsProps, REPAIRABLE_KEY, type RepairableBlockEntry, RepairableDiagramExtension, type RepairableDiagramExtensionOptions, type RepairablePluginState, StatusBar, type StatusBarProps, TIMELINE_VIEW_KEY, TRANSITION_ENTRIES, TRANSITION_GROUPS, TemplatePicker, ThemeCustomizerPanel, type ThemeCustomizerPanelProps, ThemePicker, type ThemePickerProps, type ThemeSaveExtras, type TimelineBlockEntry, type TimelineCommand, type TimelineCommandResult, TimelineCompositionPanel, type TimelineCompositionPanelProps, TimelineEditorWidget, type TimelineEditorWidgetProps, type TimelineEventPatch, TimelineToolbar, type TimelineToolbarProps, TimelineTrack, type TimelineTrackProps, TimelineVideoPanel, type TimelineVideoPanelProps, type TimelineViewData, TimelineViewExtension, type TimelineViewExtensionOptions, type TimelineViewPluginState, Toolbar, type ToolbarProps, TooltipLayer, TransformMenu, type TransitionCatalogEntry, type TransitionFields, type TransitionGroup, TransitionPicker, type TransitionPickerProps, type TreeBlockEntry, type TreeCommand, TreeOutlineWidget, type TreeViewData, TreeViewExtension, type TreeViewExtensionOptions, type TreeViewPluginState, type UseBlockNavigatorOptions, type UseFileDropOptions, type UseFileDropResult, type UseMonacoLoaderResult, VersionHistoryPanel, ViewMenuPanel, ViewSwitcher, type ViewSwitcherProps, type WrapPolicyIngest, addEdgeOp, addItemOp, addNodeOp, addTimelineEventOp, applyAsciiDiagramCommand, applyRepairCommand, applyTimelineCommand, applyTreeCommand, asciiDiagramToCanvas, buildPreviewDoc, classifyFile, codeSnippetFenceLanguageToken, codeSnippetLanguageLabel, codeSnippetMarkdown, containFenceWidgetEvents, detectLanguageFromFileName, documentTitleFromFileName, draftPatchFromImportedTheme, findAsciiDiagramBlockPos, findCodeSnippetBlockPos, findHostFenceBlockPos, findMermaidDiagramBlockPos, findRepairableBlockPos, findTimelineBlockPos, findTransitionEntry, findTreeBlockPos, formatSeconds, getBlockSlices, getTimelineForNode, indentItemOp, ingestForWrite, inspectMermaidSource, isAsciiSourceVisible, isCodeSnippetFenceLanguage, isCodeSnippetNode, isMermaidDiagramNode, isMermaidFlowchartShapeId, isMermaidSourceVisible, isRepairableFence, isTimelineSourceSafeForSemanticEdit, lineToOffset, mapFenceEntries, markdownToTiptap, mermaidDiagramMarkdown, mermaidDiagramProperties, mermaidEditCapabilities, mermaidEditableTexts, mermaidErrorMessage, monacoLanguageForFence, moveItemDownOp, moveItemUpOp, moveNodeOp, nextTimelineEventId, normalizeMermaidFlowchartShape, offsetToLine, outdentItemOp, parseTimelineForNode, partitionFiles, persistFromWrite, preloadMonaco, preloadMonacoSuggestions, processMediaFiles, processTextFile, processTextFiles, readBlockAttrsParams, readBlockAttrsTransition, readBlockAttrsValue, readHeadingLineTransition, removeEdgeOp, removeItemOp, removeNodeOp, removeTimelineEventOp, renameItemOp, renameNodeOp, renderMermaidDiagram, replaceAsciiFenceText, replaceCodeSnippetText, replaceHostFenceText, replaceAsciiFenceText as replaceTreeFenceText, resizeNodeOp, resolveFileKind, sanitizeAsciiLabel, sanitizeTimelineText, sanitizeTreeLabel, searchPickerEntries, setBlockAttrsValue, setBlockDurationInSource, setBlockStartTimeInSource, setBlockTransitionInSource, setHeadingAttrsTransition, setHeadingLineTransition, setMediaClipInSource, shouldPasteAsAsciiFence, shouldPasteAsTimelineFence, shouldPasteAsTreeFence, sliceIndexAtOffset, spliceBlock, summarizeBlockProps, templateLabel, tiptapToMarkdown, toggleAsciiSource, toggleDirOp, toggleMermaidSource, transitionLabel, translateDiagramOp, updateTimelineEventOp, useAsciiDiagramData, useBlockNavigator, useCodeSnippetData, useCustomTemplates, useCustomThemes, useDocCustomTemplates, useDocCustomThemes, useFileDrop, useMermaidDiagramData, useMonacoLoader, usePreviewSettings, useTimelineData, useTreeViewData };
package/dist/index.js CHANGED
@@ -26,8 +26,11 @@ import {
26
26
  EditorProvider,
27
27
  EditorShell,
28
28
  EmojiPicker,
29
+ FENCE_WIDGET_CONTAINED_EVENTS,
29
30
  FontPicker,
31
+ HOST_FENCE_KEY,
30
32
  HeadingWithTemplate,
33
+ HostFenceExtension,
31
34
  IMAGE_TREATMENT_PRESETS,
32
35
  ImportThemeSection,
33
36
  InlinePreviewGutter,
@@ -92,11 +95,13 @@ import {
92
95
  codeSnippetLanguageLabel,
93
96
  codeSnippetMarkdown,
94
97
  compileDraft,
98
+ containFenceWidgetEvents,
95
99
  detectLanguageFromFileName,
96
100
  documentTitleFromFileName,
97
101
  draftPatchFromImportedTheme,
98
102
  findAsciiDiagramBlockPos,
99
103
  findCodeSnippetBlockPos,
104
+ findHostFenceBlockPos,
100
105
  findMermaidDiagramBlockPos,
101
106
  findRepairableBlockPos,
102
107
  findTimelineBlockPos,
@@ -117,6 +122,7 @@ import {
117
122
  isRepairableFence,
118
123
  isTimelineSourceSafeForSemanticEdit,
119
124
  lineToOffset,
125
+ mapFenceEntries,
120
126
  mermaidDiagramMarkdown,
121
127
  mermaidDiagramProperties,
122
128
  mermaidEditCapabilities,
@@ -152,6 +158,7 @@ import {
152
158
  renderMermaidDiagram,
153
159
  replaceAsciiFenceText,
154
160
  replaceCodeSnippetText,
161
+ replaceHostFenceText,
155
162
  resizeNodeOp,
156
163
  resolveFileKind,
157
164
  sanitizeAsciiLabel,
@@ -194,7 +201,7 @@ import {
194
201
  usePreviewSettings,
195
202
  useTimelineData,
196
203
  useTreeViewData
197
- } from "./chunk-DCMJXDQY.js";
204
+ } from "./chunk-NJ2VKEQF.js";
198
205
  import "./chunk-V4NBQF5C.js";
199
206
  import {
200
207
  JsonEditor
@@ -212,7 +219,7 @@ import {
212
219
  } from "./chunk-V44VP242.js";
213
220
  import {
214
221
  RecorderButton
215
- } from "./chunk-4F7SN6WU.js";
222
+ } from "./chunk-WH3DL6TG.js";
216
223
  import {
217
224
  DEFAULT_RECORDER_DEVICE_SETTINGS,
218
225
  RecorderDeviceSettingsPanel,
@@ -223,10 +230,11 @@ import {
223
230
  buildRecorderScreenAudioConstraints,
224
231
  buildRecorderScreenConstraints,
225
232
  getCaptureKind,
233
+ recordedMediaKind,
226
234
  recorderBitsPerSecond,
227
235
  requestScreenStream,
228
236
  useMediaRecorder
229
- } from "./chunk-ZSQN6IO7.js";
237
+ } from "./chunk-JUAQQTJE.js";
230
238
  import "./chunk-GS7QWYFT.js";
231
239
  import {
232
240
  TeleprompterView
@@ -717,8 +725,11 @@ export {
717
725
  EditorProvider,
718
726
  EditorShell,
719
727
  EmojiPicker,
728
+ FENCE_WIDGET_CONTAINED_EVENTS,
720
729
  FolderView,
730
+ HOST_FENCE_KEY,
721
731
  HeadingWithTemplate,
732
+ HostFenceExtension,
722
733
  ImageEditor,
723
734
  ImageViewer,
724
735
  ImportThemeSection,
@@ -802,6 +813,7 @@ export {
802
813
  codeSnippetLanguageLabel,
803
814
  codeSnippetMarkdown,
804
815
  configureMonacoWorkers,
816
+ containFenceWidgetEvents,
805
817
  createFloatingWindowManager,
806
818
  detectFloatTiers,
807
819
  detectLanguageFromFileName,
@@ -812,6 +824,7 @@ export {
812
824
  executeNarrationSave,
813
825
  findAsciiDiagramBlockPos,
814
826
  findCodeSnippetBlockPos,
827
+ findHostFenceBlockPos,
815
828
  findMermaidDiagramBlockPos,
816
829
  findRepairableBlockPos,
817
830
  findTimelineBlockPos,
@@ -836,6 +849,7 @@ export {
836
849
  isRepairableFence,
837
850
  isTimelineSourceSafeForSemanticEdit,
838
851
  lineToOffset,
852
+ mapFenceEntries,
839
853
  markdownToTiptap,
840
854
  measureTokenLines,
841
855
  mermaidDiagramMarkdown,
@@ -865,6 +879,7 @@ export {
865
879
  readBlockAttrsTransition,
866
880
  readBlockAttrsValue,
867
881
  readHeadingLineTransition,
882
+ recordedMediaKind,
868
883
  recorderBitsPerSecond,
869
884
  registerPcmWorklet,
870
885
  removeEdgeOp,
@@ -876,6 +891,7 @@ export {
876
891
  renderMermaidDiagram,
877
892
  replaceAsciiFenceText,
878
893
  replaceCodeSnippetText,
894
+ replaceHostFenceText,
879
895
  replaceAsciiFenceText as replaceTreeFenceText,
880
896
  requestCameraStream,
881
897
  requestMicStream,
@@ -1,4 +1,4 @@
1
- export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, R as RecordedBookmark, a as RecorderAudioDeviceSettings, b as RecorderButton, c as RecorderButtonProps, d as RecorderCameraDeviceSettings, e as RecorderCameraSaveResult, f as RecorderColorScheme, g as RecorderConstraintMode, h as RecorderDeviceSettings, i as RecorderDeviceSettingsPanel, j as RecorderDeviceSettingsPanelProps, k as RecorderEncodingSettings, l as RecorderModal, m as RecorderModalProps, o as RecorderPanel, p as RecorderPanelProps, q as RecorderSaveResult, r as RecorderScreenAudioSettings, s as RecorderScreenDeviceSettings, S as ScreenStreamHandle, t as ScreenStreamOptions, T as TimingJson, u as buildRecorderAudioConstraints, v as buildRecorderCameraConstraints, w as buildRecorderScreenAudioConstraints, x as buildRecorderScreenConstraints, y as buildTimingJson, z as encodeTimingJson, A as recorderBitsPerSecond, B as requestCameraStream, E as requestMicStream, F as requestScreenStream, G as timingPathFor, H as useStreamPreview } from '../recorder-CnOKlYY3.js';
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';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RecorderButton
3
- } from "../chunk-4F7SN6WU.js";
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-ZSQN6IO7.js";
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 { recorderBitsPerSecond as A, requestCameraStream as B, type CameraStreamOptions as C, DEFAULT_RECORDER_DEVICE_SETTINGS as D, requestMicStream as E, requestScreenStream as F, timingPathFor as G, useStreamPreview as H, type RecordedBookmark as R, type ScreenStreamHandle as S, type TimingJson as T, type RecorderAudioDeviceSettings as a, RecorderButton as b, type RecorderButtonProps as c, type RecorderCameraDeviceSettings as d, type RecorderCameraSaveResult as e, type RecorderColorScheme as f, type RecorderConstraintMode as g, type RecorderDeviceSettings as h, RecorderDeviceSettingsPanel as i, type RecorderDeviceSettingsPanelProps as j, type RecorderEncodingSettings as k, RecorderModal as l, type RecorderModalProps as m, type RecorderNarrationOptions as n, RecorderPanel as o, type RecorderPanelProps as p, type RecorderSaveResult as q, type RecorderScreenAudioSettings as r, type RecorderScreenDeviceSettings as s, type ScreenStreamOptions as t, buildRecorderAudioConstraints as u, buildRecorderCameraConstraints as v, buildRecorderScreenAudioConstraints as w, buildRecorderScreenConstraints as x, buildTimingJson as y, encodeTimingJson as z };
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 };
@@ -1,9 +1,11 @@
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-CU4GpGuq.js';
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-595XbANu.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import '@bendyline/squisq/schemas';
5
+ import '@bendyline/squisq/fence';
5
6
  import '@bendyline/squisq/markdown';
6
7
  import '@bendyline/squisq/storage';
7
8
  import '@bendyline/squisq/versions';
8
9
  import '@tiptap/core';
9
10
  import 'monaco-editor';
11
+ import '@bendyline/squisq-react';
@@ -5,11 +5,11 @@ import {
5
5
  RawEditor,
6
6
  WysiwygEditor,
7
7
  useEditorContext
8
- } from "../chunk-DCMJXDQY.js";
8
+ } from "../chunk-NJ2VKEQF.js";
9
9
  import "../chunk-V4NBQF5C.js";
10
10
  import "../chunk-K2WJYVS4.js";
11
11
  import "../chunk-V44VP242.js";
12
- import "../chunk-ZSQN6IO7.js";
12
+ import "../chunk-JUAQQTJE.js";
13
13
  import "../chunk-GS7QWYFT.js";
14
14
  import "../chunk-IQFPX2CE.js";
15
15
  import "../chunk-OWOKKZAU.js";
@@ -1,11 +1,13 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { Doc, MediaProvider, ViewportPreset, Theme } from '@bendyline/squisq/schemas';
4
+ import { FenceRendererMap } from '@bendyline/squisq/fence';
4
5
  import { MarkdownDocument } from '@bendyline/squisq/markdown';
5
6
  import { ContentContainer } from '@bendyline/squisq/storage';
6
7
  import { DocumentVersionManager, SaveVersionOptions, SaveVersionResult, PrunePolicy } from '@bendyline/squisq/versions';
7
8
  import { Editor } from '@tiptap/core';
8
9
  import { editor } from 'monaco-editor';
10
+ import { CodeBlockCopyHandler } from '@bendyline/squisq-react';
9
11
 
10
12
  /**
11
13
  * Configuration a Scene host (diagram / drawing / layout widget) supplies
@@ -366,6 +368,13 @@ interface EditorContextValue extends EditorState, EditorActions {
366
368
  * host DOES resolve is unsupported. Executable schemes stay refused.
367
369
  */
368
370
  linkSchemes: readonly string[] | undefined;
371
+ /**
372
+ * Host fence-renderer registry (`@bendyline/squisq/fence`). Claimed
373
+ * fence languages render as interactive host widgets in the WYSIWYG
374
+ * editor (via `HostFenceExtension`) instead of Monaco code insets, and
375
+ * flow into the preview panel's read path. Null disables.
376
+ */
377
+ fenceRenderers: FenceRendererMap | null;
369
378
  /**
370
379
  * File name the host opened this document as (e.g. `Longview Plan.md`), if
371
380
  * any. Used as a display-title fallback — for example, the header of a
@@ -437,6 +446,11 @@ interface EditorProviderProps {
437
446
  * Omit to fall back to URL-only link insertion.
438
447
  */
439
448
  documentLinkProvider?: DocumentLinkProvider | null;
449
+ /**
450
+ * Host fence-renderer registry (`@bendyline/squisq/fence`). Omit to
451
+ * leave every explicit-language fence to the built-in families.
452
+ */
453
+ fenceRenderers?: FenceRendererMap | null;
440
454
  /**
441
455
  * Extra link schemes this host resolves itself. Threaded into the link
442
456
  * dialog's `sanitizeUrl` check so a host-custom protocol is accepted;
@@ -555,7 +569,7 @@ interface ViewPreferences {
555
569
  /** Document vs. block-at-a-time layout. */
556
570
  layoutMode?: LayoutMode;
557
571
  }
558
- declare function EditorProvider({ initialMarkdown, initialView, articleId, colorScheme: initialColorScheme, workspaceContainer, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, mediaProvider, imageDisplayMode, mentionProvider, documentLinkProvider, linkSchemes, allowRecording, allowNarrate, preserveSourceWrapping, fileName, language, findMode: controlledFindMode, onFindModeChange, inlinePreview, showStatusBar, outline, blockTags, blockTagVisibility: initialBlockTagVisibility, themeInheritance, layoutMode, viewPreferences, onViewPreferencesChange, children, }: EditorProviderProps): react_jsx_runtime.JSX.Element;
572
+ declare function EditorProvider({ initialMarkdown, initialView, articleId, colorScheme: initialColorScheme, workspaceContainer, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, mediaProvider, imageDisplayMode, mentionProvider, documentLinkProvider, fenceRenderers, linkSchemes, allowRecording, allowNarrate, preserveSourceWrapping, fileName, language, findMode: controlledFindMode, onFindModeChange, inlinePreview, showStatusBar, outline, blockTags, blockTagVisibility: initialBlockTagVisibility, themeInheritance, layoutMode, viewPreferences, onViewPreferencesChange, children, }: EditorProviderProps): react_jsx_runtime.JSX.Element;
559
573
 
560
574
  /**
561
575
  * Host-supplied context sections rendered INSIDE the Monaco (raw/code)
@@ -671,7 +685,8 @@ interface EditorShellProps {
671
685
  * Semantic mode for the surface embedding the editor. `'document'`
672
686
  * (default) exposes the normal multi-view authoring shell. `'chat'`
673
687
  * starts and stays in Write view through the shell's own controls, hides
674
- * the view tabs, and removes document-level layout, transform, view, and
688
+ * the view tabs, hides formatting controls by default while retaining the
689
+ * Insert menu, and removes document-level layout, transform, view, and
675
690
  * settings controls from the toolbar.
676
691
  */
677
692
  hostMode?: EditorHostMode;
@@ -693,6 +708,13 @@ interface EditorShellProps {
693
708
  * navigation; any other return (or void) marks the link as handled.
694
709
  */
695
710
  onLinkClick?: (href: string) => boolean | undefined;
711
+ /** Show a Copy button on ordinary fenced code blocks (default: false). */
712
+ showCodeCopyButton?: boolean;
713
+ /**
714
+ * Optional host clipboard adapter. When omitted, enabled controls use the
715
+ * browser Clipboard API. Electron/native hosts can bridge copying here.
716
+ */
717
+ onCopyCode?: CodeBlockCopyHandler;
696
718
  /**
697
719
  * Light/dark chrome color scheme for the editor shell — toolbar, tabs,
698
720
  * status bar, and side panes (default: `'light'`). This is the editor's
@@ -768,6 +790,18 @@ interface EditorShellProps {
768
790
  onSaveVersion?: (result: SaveVersionResult) => void;
769
791
  /** Show the Files toggle in the toolbar. Defaults to true when mediaProvider is passed. */
770
792
  showFilesToggle?: boolean;
793
+ /**
794
+ * Show the toolbar's built-in text, block, and contextual formatting
795
+ * controls. The toolbar, Insert menu, and host-provided slots remain
796
+ * visible when false. Defaults to true in document mode and false in chat
797
+ * mode.
798
+ */
799
+ showFormattingControls?: boolean;
800
+ /**
801
+ * Show the toolbar's built-in Insert button and menu independently of the
802
+ * formatting controls. Defaults to true.
803
+ */
804
+ showInsertControls?: boolean;
771
805
  /**
772
806
  * Whether the Files panel offers browser downloads for its binary entries.
773
807
  * Defaults to true. Pass false to remove the built-in download affordance.
@@ -906,6 +940,15 @@ interface EditorShellProps {
906
940
  * remote API, …) implement this; the editor stays agnostic.
907
941
  */
908
942
  documentLinkProvider?: DocumentLinkProvider | null;
943
+ /**
944
+ * Host fence-renderer registry (`@bendyline/squisq/fence`). Claimed
945
+ * fence languages mount as interactive host widgets in the WYSIWYG
946
+ * view (via `HostFenceExtension`) instead of Monaco code insets. The
947
+ * *set* of claimed languages is read at editor configure time;
948
+ * renderer implementations stay live behind a getter. Omit to leave
949
+ * every fence to the built-in families.
950
+ */
951
+ fenceRenderers?: FenceRendererMap | null;
909
952
  /**
910
953
  * Extra link schemes this host resolves itself (e.g. an app-internal
911
954
  * navigation protocol). The link dialog validates typed URLs against
@@ -1065,7 +1108,7 @@ interface EditorShellProps {
1065
1108
  * Complete markdown editor shell with toolbar, view switcher, and three
1066
1109
  * editing modes: Raw (Monaco), WYSIWYG (Tiptap), and Preview.
1067
1110
  */
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;
1111
+ 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, fenceRenderers, 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
1112
 
1070
1113
  /**
1071
1114
  * RawEditor
@@ -1143,12 +1186,16 @@ interface PreviewPanelProps {
1143
1186
  workspaceContainer?: ContentContainer | null;
1144
1187
  /** Delegate authored link activation to the embedding host. */
1145
1188
  onLinkClick?: (href: string) => boolean | undefined;
1189
+ /** Show a Copy button on ordinary fenced code blocks (default: false). */
1190
+ showCodeCopyButton?: boolean;
1191
+ /** Optional host clipboard adapter; otherwise the browser Clipboard API is used. */
1192
+ onCopyCode?: CodeBlockCopyHandler;
1146
1193
  }
1147
1194
  /**
1148
1195
  * Live preview panel that renders the current document as a slideshow
1149
1196
  * or document view. Controls (viewport, mode, theme, transform, captions)
1150
1197
  * are rendered in the main toolbar via PreviewToolbarControls.
1151
1198
  */
1152
- declare function PreviewPanel({ basePath, className, workspaceContainer, onLinkClick, }: PreviewPanelProps): react_jsx_runtime.JSX.Element;
1199
+ declare function PreviewPanel({ basePath, className, workspaceContainer, onLinkClick, showCodeCopyButton, onCopyCode, }: PreviewPanelProps): react_jsx_runtime.JSX.Element;
1153
1200
 
1154
1201
  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 };