@bendyline/squisq-editor-react 1.5.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/dist/index.d.ts +1991 -90
  2. package/dist/index.js +17162 -82
  3. package/dist/index.js.map +1 -1
  4. package/package.json +4 -4
  5. package/src/RawEditor.tsx +49 -18
  6. package/src/VersionHistoryPanel.tsx +59 -17
  7. package/src/recorder/hooks/useMediaRecorder.ts +9 -1
  8. package/src/useMonacoLoader.ts +83 -0
  9. package/dist/DocumentSettingsDialog.d.ts +0 -26
  10. package/dist/DocumentSettingsDialog.d.ts.map +0 -1
  11. package/dist/DocumentSettingsDialog.js +0 -115
  12. package/dist/DocumentSettingsDialog.js.map +0 -1
  13. package/dist/DropZoneOverlay.d.ts +0 -24
  14. package/dist/DropZoneOverlay.d.ts.map +0 -1
  15. package/dist/DropZoneOverlay.js +0 -53
  16. package/dist/DropZoneOverlay.js.map +0 -1
  17. package/dist/EditorContext.d.ts +0 -391
  18. package/dist/EditorContext.d.ts.map +0 -1
  19. package/dist/EditorContext.js +0 -471
  20. package/dist/EditorContext.js.map +0 -1
  21. package/dist/EditorShell.d.ts +0 -328
  22. package/dist/EditorShell.d.ts.map +0 -1
  23. package/dist/EditorShell.js +0 -290
  24. package/dist/EditorShell.js.map +0 -1
  25. package/dist/EmojiPicker.d.ts +0 -50
  26. package/dist/EmojiPicker.d.ts.map +0 -1
  27. package/dist/EmojiPicker.js +0 -182
  28. package/dist/EmojiPicker.js.map +0 -1
  29. package/dist/ImageEditor.d.ts +0 -68
  30. package/dist/ImageEditor.d.ts.map +0 -1
  31. package/dist/ImageEditor.js +0 -166
  32. package/dist/ImageEditor.js.map +0 -1
  33. package/dist/ImageNodeView.d.ts +0 -27
  34. package/dist/ImageNodeView.d.ts.map +0 -1
  35. package/dist/ImageNodeView.js +0 -215
  36. package/dist/ImageNodeView.js.map +0 -1
  37. package/dist/ImageViewer.d.ts +0 -26
  38. package/dist/ImageViewer.d.ts.map +0 -1
  39. package/dist/ImageViewer.js +0 -119
  40. package/dist/ImageViewer.js.map +0 -1
  41. package/dist/InlineIcon.d.ts +0 -17
  42. package/dist/InlineIcon.d.ts.map +0 -1
  43. package/dist/InlineIcon.js +0 -72
  44. package/dist/InlineIcon.js.map +0 -1
  45. package/dist/InlinePreviewGutter.d.ts +0 -52
  46. package/dist/InlinePreviewGutter.d.ts.map +0 -1
  47. package/dist/InlinePreviewGutter.js +0 -397
  48. package/dist/InlinePreviewGutter.js.map +0 -1
  49. package/dist/LinkDialog.d.ts +0 -43
  50. package/dist/LinkDialog.d.ts.map +0 -1
  51. package/dist/LinkDialog.js +0 -102
  52. package/dist/LinkDialog.js.map +0 -1
  53. package/dist/MediaBin.d.ts +0 -29
  54. package/dist/MediaBin.d.ts.map +0 -1
  55. package/dist/MediaBin.js +0 -166
  56. package/dist/MediaBin.js.map +0 -1
  57. package/dist/MentionExtension.d.ts +0 -22
  58. package/dist/MentionExtension.d.ts.map +0 -1
  59. package/dist/MentionExtension.js +0 -245
  60. package/dist/MentionExtension.js.map +0 -1
  61. package/dist/OutlinePanel.d.ts +0 -17
  62. package/dist/OutlinePanel.d.ts.map +0 -1
  63. package/dist/OutlinePanel.js +0 -167
  64. package/dist/OutlinePanel.js.map +0 -1
  65. package/dist/PlainHtmlPreview.d.ts +0 -50
  66. package/dist/PlainHtmlPreview.d.ts.map +0 -1
  67. package/dist/PlainHtmlPreview.js +0 -155
  68. package/dist/PlainHtmlPreview.js.map +0 -1
  69. package/dist/PreviewControls.d.ts +0 -55
  70. package/dist/PreviewControls.d.ts.map +0 -1
  71. package/dist/PreviewControls.js +0 -277
  72. package/dist/PreviewControls.js.map +0 -1
  73. package/dist/PreviewPanel.d.ts +0 -29
  74. package/dist/PreviewPanel.d.ts.map +0 -1
  75. package/dist/PreviewPanel.js +0 -94
  76. package/dist/PreviewPanel.js.map +0 -1
  77. package/dist/RawEditor.d.ts +0 -32
  78. package/dist/RawEditor.d.ts.map +0 -1
  79. package/dist/RawEditor.js +0 -440
  80. package/dist/RawEditor.js.map +0 -1
  81. package/dist/RecorderEntry.d.ts +0 -24
  82. package/dist/RecorderEntry.d.ts.map +0 -1
  83. package/dist/RecorderEntry.js +0 -139
  84. package/dist/RecorderEntry.js.map +0 -1
  85. package/dist/StatusBar.d.ts +0 -15
  86. package/dist/StatusBar.d.ts.map +0 -1
  87. package/dist/StatusBar.js +0 -24
  88. package/dist/StatusBar.js.map +0 -1
  89. package/dist/TemplateAnnotation.d.ts +0 -20
  90. package/dist/TemplateAnnotation.d.ts.map +0 -1
  91. package/dist/TemplateAnnotation.js +0 -97
  92. package/dist/TemplateAnnotation.js.map +0 -1
  93. package/dist/TemplatePicker.d.ts +0 -53
  94. package/dist/TemplatePicker.d.ts.map +0 -1
  95. package/dist/TemplatePicker.js +0 -388
  96. package/dist/TemplatePicker.js.map +0 -1
  97. package/dist/ThemeCustomizerPanel.d.ts +0 -32
  98. package/dist/ThemeCustomizerPanel.d.ts.map +0 -1
  99. package/dist/ThemeCustomizerPanel.js +0 -256
  100. package/dist/ThemeCustomizerPanel.js.map +0 -1
  101. package/dist/ThemePicker.d.ts +0 -33
  102. package/dist/ThemePicker.d.ts.map +0 -1
  103. package/dist/ThemePicker.js +0 -148
  104. package/dist/ThemePicker.js.map +0 -1
  105. package/dist/Toolbar.d.ts +0 -36
  106. package/dist/Toolbar.d.ts.map +0 -1
  107. package/dist/Toolbar.js +0 -1001
  108. package/dist/Toolbar.js.map +0 -1
  109. package/dist/Tooltip.d.ts +0 -10
  110. package/dist/Tooltip.d.ts.map +0 -1
  111. package/dist/Tooltip.js +0 -104
  112. package/dist/Tooltip.js.map +0 -1
  113. package/dist/VersionHistoryPanel.d.ts +0 -14
  114. package/dist/VersionHistoryPanel.d.ts.map +0 -1
  115. package/dist/VersionHistoryPanel.js +0 -147
  116. package/dist/VersionHistoryPanel.js.map +0 -1
  117. package/dist/ViewMenuPanel.d.ts +0 -13
  118. package/dist/ViewMenuPanel.d.ts.map +0 -1
  119. package/dist/ViewMenuPanel.js +0 -58
  120. package/dist/ViewMenuPanel.js.map +0 -1
  121. package/dist/ViewSwitcher.d.ts +0 -14
  122. package/dist/ViewSwitcher.d.ts.map +0 -1
  123. package/dist/ViewSwitcher.js +0 -26
  124. package/dist/ViewSwitcher.js.map +0 -1
  125. package/dist/WysiwygEditor.d.ts +0 -39
  126. package/dist/WysiwygEditor.d.ts.map +0 -1
  127. package/dist/WysiwygEditor.js +0 -537
  128. package/dist/WysiwygEditor.js.map +0 -1
  129. package/dist/__tests__/detectMarkdown.test.d.ts +0 -2
  130. package/dist/__tests__/detectMarkdown.test.d.ts.map +0 -1
  131. package/dist/__tests__/detectMarkdown.test.js +0 -55
  132. package/dist/__tests__/detectMarkdown.test.js.map +0 -1
  133. package/dist/__tests__/documentSettingsDialog.test.d.ts +0 -2
  134. package/dist/__tests__/documentSettingsDialog.test.d.ts.map +0 -1
  135. package/dist/__tests__/documentSettingsDialog.test.js +0 -132
  136. package/dist/__tests__/documentSettingsDialog.test.js.map +0 -1
  137. package/dist/__tests__/emojiPicker.test.d.ts +0 -2
  138. package/dist/__tests__/emojiPicker.test.d.ts.map +0 -1
  139. package/dist/__tests__/emojiPicker.test.js +0 -111
  140. package/dist/__tests__/emojiPicker.test.js.map +0 -1
  141. package/dist/__tests__/fileKind.test.d.ts +0 -2
  142. package/dist/__tests__/fileKind.test.d.ts.map +0 -1
  143. package/dist/__tests__/fileKind.test.js +0 -94
  144. package/dist/__tests__/fileKind.test.js.map +0 -1
  145. package/dist/__tests__/imageEditAffordance.test.d.ts +0 -2
  146. package/dist/__tests__/imageEditAffordance.test.d.ts.map +0 -1
  147. package/dist/__tests__/imageEditAffordance.test.js +0 -188
  148. package/dist/__tests__/imageEditAffordance.test.js.map +0 -1
  149. package/dist/__tests__/imageEditorShell.test.d.ts +0 -2
  150. package/dist/__tests__/imageEditorShell.test.d.ts.map +0 -1
  151. package/dist/__tests__/imageEditorShell.test.js +0 -52
  152. package/dist/__tests__/imageEditorShell.test.js.map +0 -1
  153. package/dist/__tests__/imageEditorState.test.d.ts +0 -3
  154. package/dist/__tests__/imageEditorState.test.d.ts.map +0 -1
  155. package/dist/__tests__/imageEditorState.test.js +0 -148
  156. package/dist/__tests__/imageEditorState.test.js.map +0 -1
  157. package/dist/__tests__/inlinePreviewGutter.test.d.ts +0 -2
  158. package/dist/__tests__/inlinePreviewGutter.test.d.ts.map +0 -1
  159. package/dist/__tests__/inlinePreviewGutter.test.js +0 -51
  160. package/dist/__tests__/inlinePreviewGutter.test.js.map +0 -1
  161. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts +0 -2
  162. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts.map +0 -1
  163. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js +0 -63
  164. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js.map +0 -1
  165. package/dist/__tests__/jsonEditor.test.d.ts +0 -2
  166. package/dist/__tests__/jsonEditor.test.d.ts.map +0 -1
  167. package/dist/__tests__/jsonEditor.test.js +0 -134
  168. package/dist/__tests__/jsonEditor.test.js.map +0 -1
  169. package/dist/__tests__/layersPanel.test.d.ts +0 -2
  170. package/dist/__tests__/layersPanel.test.d.ts.map +0 -1
  171. package/dist/__tests__/layersPanel.test.js +0 -84
  172. package/dist/__tests__/layersPanel.test.js.map +0 -1
  173. package/dist/__tests__/linkDialogDocPicker.test.d.ts +0 -7
  174. package/dist/__tests__/linkDialogDocPicker.test.d.ts.map +0 -1
  175. package/dist/__tests__/linkDialogDocPicker.test.js +0 -75
  176. package/dist/__tests__/linkDialogDocPicker.test.js.map +0 -1
  177. package/dist/__tests__/mediaAttachmentFlow.test.d.ts +0 -2
  178. package/dist/__tests__/mediaAttachmentFlow.test.d.ts.map +0 -1
  179. package/dist/__tests__/mediaAttachmentFlow.test.js +0 -99
  180. package/dist/__tests__/mediaAttachmentFlow.test.js.map +0 -1
  181. package/dist/__tests__/outlinePanel.test.d.ts +0 -2
  182. package/dist/__tests__/outlinePanel.test.d.ts.map +0 -1
  183. package/dist/__tests__/outlinePanel.test.js +0 -68
  184. package/dist/__tests__/outlinePanel.test.js.map +0 -1
  185. package/dist/__tests__/plainHtmlPreview.test.d.ts +0 -2
  186. package/dist/__tests__/plainHtmlPreview.test.d.ts.map +0 -1
  187. package/dist/__tests__/plainHtmlPreview.test.js +0 -87
  188. package/dist/__tests__/plainHtmlPreview.test.js.map +0 -1
  189. package/dist/__tests__/propertiesPanel.test.d.ts +0 -2
  190. package/dist/__tests__/propertiesPanel.test.d.ts.map +0 -1
  191. package/dist/__tests__/propertiesPanel.test.js +0 -64
  192. package/dist/__tests__/propertiesPanel.test.js.map +0 -1
  193. package/dist/__tests__/recorderFormats.test.d.ts +0 -2
  194. package/dist/__tests__/recorderFormats.test.d.ts.map +0 -1
  195. package/dist/__tests__/recorderFormats.test.js +0 -121
  196. package/dist/__tests__/recorderFormats.test.js.map +0 -1
  197. package/dist/__tests__/recorderTimingJson.test.d.ts +0 -2
  198. package/dist/__tests__/recorderTimingJson.test.d.ts.map +0 -1
  199. package/dist/__tests__/recorderTimingJson.test.js +0 -37
  200. package/dist/__tests__/recorderTimingJson.test.js.map +0 -1
  201. package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts +0 -2
  202. package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts.map +0 -1
  203. package/dist/__tests__/templateAnnotationRoundTrip.test.js +0 -31
  204. package/dist/__tests__/templateAnnotationRoundTrip.test.js.map +0 -1
  205. package/dist/__tests__/tiptapBridge.test.d.ts +0 -2
  206. package/dist/__tests__/tiptapBridge.test.d.ts.map +0 -1
  207. package/dist/__tests__/tiptapBridge.test.js +0 -303
  208. package/dist/__tests__/tiptapBridge.test.js.map +0 -1
  209. package/dist/__tests__/tiptapImageRoundTrip.test.d.ts +0 -2
  210. package/dist/__tests__/tiptapImageRoundTrip.test.d.ts.map +0 -1
  211. package/dist/__tests__/tiptapImageRoundTrip.test.js +0 -68
  212. package/dist/__tests__/tiptapImageRoundTrip.test.js.map +0 -1
  213. package/dist/__tests__/useImageEditor.test.d.ts +0 -2
  214. package/dist/__tests__/useImageEditor.test.d.ts.map +0 -1
  215. package/dist/__tests__/useImageEditor.test.js +0 -131
  216. package/dist/__tests__/useImageEditor.test.js.map +0 -1
  217. package/dist/__tests__/useMediaRecorder.test.d.ts +0 -2
  218. package/dist/__tests__/useMediaRecorder.test.d.ts.map +0 -1
  219. package/dist/__tests__/useMediaRecorder.test.js +0 -153
  220. package/dist/__tests__/useMediaRecorder.test.js.map +0 -1
  221. package/dist/__tests__/versionHistory.test.d.ts +0 -2
  222. package/dist/__tests__/versionHistory.test.d.ts.map +0 -1
  223. package/dist/__tests__/versionHistory.test.js +0 -124
  224. package/dist/__tests__/versionHistory.test.js.map +0 -1
  225. package/dist/blockSlice.d.ts +0 -24
  226. package/dist/blockSlice.d.ts.map +0 -1
  227. package/dist/blockSlice.js +0 -63
  228. package/dist/blockSlice.js.map +0 -1
  229. package/dist/buildPreviewDoc.d.ts +0 -22
  230. package/dist/buildPreviewDoc.d.ts.map +0 -1
  231. package/dist/buildPreviewDoc.js +0 -262
  232. package/dist/buildPreviewDoc.js.map +0 -1
  233. package/dist/detectMarkdown.d.ts +0 -20
  234. package/dist/detectMarkdown.d.ts.map +0 -1
  235. package/dist/detectMarkdown.js +0 -61
  236. package/dist/detectMarkdown.js.map +0 -1
  237. package/dist/emojiData.d.ts +0 -81
  238. package/dist/emojiData.d.ts.map +0 -1
  239. package/dist/emojiData.js +0 -1283
  240. package/dist/emojiData.js.map +0 -1
  241. package/dist/fileKind.d.ts +0 -34
  242. package/dist/fileKind.d.ts.map +0 -1
  243. package/dist/fileKind.js +0 -144
  244. package/dist/fileKind.js.map +0 -1
  245. package/dist/hooks/useFileDrop.d.ts +0 -41
  246. package/dist/hooks/useFileDrop.d.ts.map +0 -1
  247. package/dist/hooks/useFileDrop.js +0 -205
  248. package/dist/hooks/useFileDrop.js.map +0 -1
  249. package/dist/imageEditor/CanvasSurface.d.ts +0 -31
  250. package/dist/imageEditor/CanvasSurface.d.ts.map +0 -1
  251. package/dist/imageEditor/CanvasSurface.js +0 -264
  252. package/dist/imageEditor/CanvasSurface.js.map +0 -1
  253. package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts +0 -39
  254. package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts.map +0 -1
  255. package/dist/imageEditor/ImageVersionHistoryDropdown.js +0 -283
  256. package/dist/imageEditor/ImageVersionHistoryDropdown.js.map +0 -1
  257. package/dist/imageEditor/LayersPanel.d.ts +0 -14
  258. package/dist/imageEditor/LayersPanel.d.ts.map +0 -1
  259. package/dist/imageEditor/LayersPanel.js +0 -43
  260. package/dist/imageEditor/LayersPanel.js.map +0 -1
  261. package/dist/imageEditor/PropertiesPanel.d.ts +0 -14
  262. package/dist/imageEditor/PropertiesPanel.d.ts.map +0 -1
  263. package/dist/imageEditor/PropertiesPanel.js +0 -97
  264. package/dist/imageEditor/PropertiesPanel.js.map +0 -1
  265. package/dist/imageEditor/Toolbar.d.ts +0 -30
  266. package/dist/imageEditor/Toolbar.d.ts.map +0 -1
  267. package/dist/imageEditor/Toolbar.js +0 -108
  268. package/dist/imageEditor/Toolbar.js.map +0 -1
  269. package/dist/imageEditor/icons.d.ts +0 -24
  270. package/dist/imageEditor/icons.d.ts.map +0 -1
  271. package/dist/imageEditor/icons.js +0 -45
  272. package/dist/imageEditor/icons.js.map +0 -1
  273. package/dist/imageEditor/layers/EditorImageLayer.d.ts +0 -16
  274. package/dist/imageEditor/layers/EditorImageLayer.d.ts.map +0 -1
  275. package/dist/imageEditor/layers/EditorImageLayer.js +0 -37
  276. package/dist/imageEditor/layers/EditorImageLayer.js.map +0 -1
  277. package/dist/imageEditor/layers/EditorShapeLayer.d.ts +0 -15
  278. package/dist/imageEditor/layers/EditorShapeLayer.d.ts.map +0 -1
  279. package/dist/imageEditor/layers/EditorShapeLayer.js +0 -20
  280. package/dist/imageEditor/layers/EditorShapeLayer.js.map +0 -1
  281. package/dist/imageEditor/layers/EditorTextLayer.d.ts +0 -18
  282. package/dist/imageEditor/layers/EditorTextLayer.d.ts.map +0 -1
  283. package/dist/imageEditor/layers/EditorTextLayer.js +0 -13
  284. package/dist/imageEditor/layers/EditorTextLayer.js.map +0 -1
  285. package/dist/imageEditor/layers/SelectionHandles.d.ts +0 -17
  286. package/dist/imageEditor/layers/SelectionHandles.d.ts.map +0 -1
  287. package/dist/imageEditor/layers/SelectionHandles.js +0 -19
  288. package/dist/imageEditor/layers/SelectionHandles.js.map +0 -1
  289. package/dist/imageEditor/state.d.ts +0 -76
  290. package/dist/imageEditor/state.d.ts.map +0 -1
  291. package/dist/imageEditor/state.js +0 -87
  292. package/dist/imageEditor/state.js.map +0 -1
  293. package/dist/imageEditor/useImageEditor.d.ts +0 -53
  294. package/dist/imageEditor/useImageEditor.d.ts.map +0 -1
  295. package/dist/imageEditor/useImageEditor.js +0 -244
  296. package/dist/imageEditor/useImageEditor.js.map +0 -1
  297. package/dist/imageEditor/useImageEditorTokens.d.ts +0 -16
  298. package/dist/imageEditor/useImageEditorTokens.d.ts.map +0 -1
  299. package/dist/imageEditor/useImageEditorTokens.js +0 -45
  300. package/dist/imageEditor/useImageEditorTokens.js.map +0 -1
  301. package/dist/index.d.ts.map +0 -1
  302. package/dist/jsonEditor/EmbeddedRichTextField.d.ts +0 -15
  303. package/dist/jsonEditor/EmbeddedRichTextField.d.ts.map +0 -1
  304. package/dist/jsonEditor/EmbeddedRichTextField.js +0 -74
  305. package/dist/jsonEditor/EmbeddedRichTextField.js.map +0 -1
  306. package/dist/jsonEditor/JsonEditor.d.ts +0 -36
  307. package/dist/jsonEditor/JsonEditor.d.ts.map +0 -1
  308. package/dist/jsonEditor/JsonEditor.js +0 -15
  309. package/dist/jsonEditor/JsonEditor.js.map +0 -1
  310. package/dist/jsonEditor/JsonEditorContext.d.ts +0 -28
  311. package/dist/jsonEditor/JsonEditorContext.d.ts.map +0 -1
  312. package/dist/jsonEditor/JsonEditorContext.js +0 -41
  313. package/dist/jsonEditor/JsonEditorContext.js.map +0 -1
  314. package/dist/jsonEditor/RenderNode.d.ts +0 -16
  315. package/dist/jsonEditor/RenderNode.d.ts.map +0 -1
  316. package/dist/jsonEditor/RenderNode.js +0 -32
  317. package/dist/jsonEditor/RenderNode.js.map +0 -1
  318. package/dist/jsonEditor/editors.d.ts +0 -36
  319. package/dist/jsonEditor/editors.d.ts.map +0 -1
  320. package/dist/jsonEditor/editors.js +0 -347
  321. package/dist/jsonEditor/editors.js.map +0 -1
  322. package/dist/jsonEditor/index.d.ts +0 -3
  323. package/dist/jsonEditor/index.d.ts.map +0 -1
  324. package/dist/jsonEditor/index.js +0 -2
  325. package/dist/jsonEditor/index.js.map +0 -1
  326. package/dist/jsonEditor/useJsonEditorTokens.d.ts +0 -13
  327. package/dist/jsonEditor/useJsonEditorTokens.d.ts.map +0 -1
  328. package/dist/jsonEditor/useJsonEditorTokens.js +0 -38
  329. package/dist/jsonEditor/useJsonEditorTokens.js.map +0 -1
  330. package/dist/mediaDragMime.d.ts +0 -17
  331. package/dist/mediaDragMime.d.ts.map +0 -1
  332. package/dist/mediaDragMime.js +0 -22
  333. package/dist/mediaDragMime.js.map +0 -1
  334. package/dist/recorder/RecorderButton.d.ts +0 -31
  335. package/dist/recorder/RecorderButton.d.ts.map +0 -1
  336. package/dist/recorder/RecorderButton.js +0 -24
  337. package/dist/recorder/RecorderButton.js.map +0 -1
  338. package/dist/recorder/RecorderModal.d.ts +0 -59
  339. package/dist/recorder/RecorderModal.d.ts.map +0 -1
  340. package/dist/recorder/RecorderModal.js +0 -333
  341. package/dist/recorder/RecorderModal.js.map +0 -1
  342. package/dist/recorder/RecorderPanel.d.ts +0 -25
  343. package/dist/recorder/RecorderPanel.d.ts.map +0 -1
  344. package/dist/recorder/RecorderPanel.js +0 -30
  345. package/dist/recorder/RecorderPanel.js.map +0 -1
  346. package/dist/recorder/formats.d.ts +0 -51
  347. package/dist/recorder/formats.d.ts.map +0 -1
  348. package/dist/recorder/formats.js +0 -144
  349. package/dist/recorder/formats.js.map +0 -1
  350. package/dist/recorder/hooks/useMediaRecorder.d.ts +0 -90
  351. package/dist/recorder/hooks/useMediaRecorder.d.ts.map +0 -1
  352. package/dist/recorder/hooks/useMediaRecorder.js +0 -277
  353. package/dist/recorder/hooks/useMediaRecorder.js.map +0 -1
  354. package/dist/recorder/hooks/useStreamPreview.d.ts +0 -22
  355. package/dist/recorder/hooks/useStreamPreview.d.ts.map +0 -1
  356. package/dist/recorder/hooks/useStreamPreview.js +0 -44
  357. package/dist/recorder/hooks/useStreamPreview.js.map +0 -1
  358. package/dist/recorder/sources/cameraStream.d.ts +0 -22
  359. package/dist/recorder/sources/cameraStream.d.ts.map +0 -1
  360. package/dist/recorder/sources/cameraStream.js +0 -24
  361. package/dist/recorder/sources/cameraStream.js.map +0 -1
  362. package/dist/recorder/sources/micStream.d.ts +0 -15
  363. package/dist/recorder/sources/micStream.d.ts.map +0 -1
  364. package/dist/recorder/sources/micStream.js +0 -24
  365. package/dist/recorder/sources/micStream.js.map +0 -1
  366. package/dist/recorder/sources/screenStream.d.ts +0 -53
  367. package/dist/recorder/sources/screenStream.d.ts.map +0 -1
  368. package/dist/recorder/sources/screenStream.js +0 -114
  369. package/dist/recorder/sources/screenStream.js.map +0 -1
  370. package/dist/recorder/timingJson.d.ts +0 -51
  371. package/dist/recorder/timingJson.d.ts.map +0 -1
  372. package/dist/recorder/timingJson.js +0 -42
  373. package/dist/recorder/timingJson.js.map +0 -1
  374. package/dist/tiptap/TiptapAudio.d.ts +0 -26
  375. package/dist/tiptap/TiptapAudio.d.ts.map +0 -1
  376. package/dist/tiptap/TiptapAudio.js +0 -58
  377. package/dist/tiptap/TiptapAudio.js.map +0 -1
  378. package/dist/tiptap/TiptapVideo.d.ts +0 -30
  379. package/dist/tiptap/TiptapVideo.d.ts.map +0 -1
  380. package/dist/tiptap/TiptapVideo.js +0 -66
  381. package/dist/tiptap/TiptapVideo.js.map +0 -1
  382. package/dist/tiptap/useResolvedMediaSrc.d.ts +0 -2
  383. package/dist/tiptap/useResolvedMediaSrc.d.ts.map +0 -1
  384. package/dist/tiptap/useResolvedMediaSrc.js +0 -42
  385. package/dist/tiptap/useResolvedMediaSrc.js.map +0 -1
  386. package/dist/tiptapBridge.d.ts +0 -24
  387. package/dist/tiptapBridge.d.ts.map +0 -1
  388. package/dist/tiptapBridge.js +0 -749
  389. package/dist/tiptapBridge.js.map +0 -1
  390. package/dist/useHeadingLayout.d.ts +0 -54
  391. package/dist/useHeadingLayout.d.ts.map +0 -1
  392. package/dist/useHeadingLayout.js +0 -260
  393. package/dist/useHeadingLayout.js.map +0 -1
  394. package/dist/utils/collectInlineFontAwesomeCss.d.ts +0 -21
  395. package/dist/utils/collectInlineFontAwesomeCss.d.ts.map +0 -1
  396. package/dist/utils/collectInlineFontAwesomeCss.js +0 -68
  397. package/dist/utils/collectInlineFontAwesomeCss.js.map +0 -1
  398. package/dist/utils/dropUtils.d.ts +0 -55
  399. package/dist/utils/dropUtils.d.ts.map +0 -1
  400. package/dist/utils/dropUtils.js +0 -110
  401. package/dist/utils/dropUtils.js.map +0 -1
  402. package/dist/utils/normalizeMalformedAssetUrl.d.ts +0 -15
  403. package/dist/utils/normalizeMalformedAssetUrl.d.ts.map +0 -1
  404. package/dist/utils/normalizeMalformedAssetUrl.js +0 -27
  405. package/dist/utils/normalizeMalformedAssetUrl.js.map +0 -1
package/dist/MediaBin.js DELETED
@@ -1,166 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * MediaBin
4
- *
5
- * Toggleable side panel that displays files associated with the current
6
- * content. Shows image thumbnails, icons for other types, file sizes,
7
- * and provides an upload button to add new media.
8
- */
9
- import { useState, useEffect, useRef, useCallback } from 'react';
10
- import { SQUISQ_MEDIA_MIME } from './mediaDragMime';
11
- // ============================================
12
- // Helpers
13
- // ============================================
14
- function formatSize(bytes) {
15
- if (bytes < 1024)
16
- return `${bytes} B`;
17
- if (bytes < 1024 * 1024)
18
- return `${(bytes / 1024).toFixed(1)} KB`;
19
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
20
- }
21
- function iconForMime(mimeType) {
22
- if (mimeType.startsWith('image/'))
23
- return '\u{1F5BC}';
24
- if (mimeType.startsWith('audio/'))
25
- return '\u{1F50A}';
26
- if (mimeType.startsWith('video/'))
27
- return '\u{1F3AC}';
28
- if (mimeType.includes('json'))
29
- return '{ }';
30
- if (mimeType.includes('xml') || mimeType.includes('ssml'))
31
- return '\u{2329}/\u{232A}';
32
- return '\u{1F4C4}';
33
- }
34
- function isImageMime(mimeType) {
35
- return mimeType.startsWith('image/');
36
- }
37
- // ============================================
38
- // Component
39
- // ============================================
40
- export function MediaBin({ mediaProvider, isDark, refreshKey, onMediaUploaded }) {
41
- const [entries, setEntries] = useState([]);
42
- const [thumbUrls, setThumbUrls] = useState({});
43
- const [loading, setLoading] = useState(false);
44
- const fileInputRef = useRef(null);
45
- // Scan media entries whenever the provider changes or refreshKey bumps
46
- useEffect(() => {
47
- if (!mediaProvider) {
48
- setEntries([]);
49
- setThumbUrls({});
50
- return;
51
- }
52
- let cancelled = false;
53
- async function scan() {
54
- setLoading(true);
55
- try {
56
- const list = await mediaProvider.listMedia();
57
- if (cancelled)
58
- return;
59
- list.sort((a, b) => {
60
- const aImg = isImageMime(a.mimeType) ? 0 : 1;
61
- const bImg = isImageMime(b.mimeType) ? 0 : 1;
62
- if (aImg !== bImg)
63
- return aImg - bImg;
64
- return a.name.localeCompare(b.name);
65
- });
66
- setEntries(list);
67
- const urls = {};
68
- for (const entry of list) {
69
- if (isImageMime(entry.mimeType)) {
70
- try {
71
- urls[entry.name] = await mediaProvider.resolveUrl(entry.name);
72
- }
73
- catch {
74
- // skip failed resolve
75
- }
76
- }
77
- }
78
- if (!cancelled)
79
- setThumbUrls(urls);
80
- }
81
- finally {
82
- if (!cancelled)
83
- setLoading(false);
84
- }
85
- }
86
- scan();
87
- return () => {
88
- cancelled = true;
89
- };
90
- }, [mediaProvider, refreshKey]);
91
- // ---- Upload ----
92
- const handleUploadClick = useCallback(() => {
93
- fileInputRef.current?.click();
94
- }, []);
95
- const handleFileChange = useCallback(async (e) => {
96
- const files = e.target.files;
97
- if (!files || !mediaProvider)
98
- return;
99
- setLoading(true);
100
- try {
101
- for (let i = 0; i < files.length; i++) {
102
- const file = files[i];
103
- if (!file)
104
- continue;
105
- const buffer = await file.arrayBuffer();
106
- const mimeType = file.type || 'application/octet-stream';
107
- const relativePath = await mediaProvider.addMedia(file.name, buffer, mimeType);
108
- if (onMediaUploaded) {
109
- try {
110
- await onMediaUploaded(relativePath, file.name, mimeType);
111
- }
112
- catch {
113
- /* callback is a nice-to-have; don't abort the upload batch */
114
- }
115
- }
116
- }
117
- // Re-scan
118
- const list = await mediaProvider.listMedia();
119
- list.sort((a, b) => {
120
- const aImg = isImageMime(a.mimeType) ? 0 : 1;
121
- const bImg = isImageMime(b.mimeType) ? 0 : 1;
122
- if (aImg !== bImg)
123
- return aImg - bImg;
124
- return a.name.localeCompare(b.name);
125
- });
126
- setEntries(list);
127
- const urls = {};
128
- for (const entry of list) {
129
- if (isImageMime(entry.mimeType)) {
130
- try {
131
- urls[entry.name] = await mediaProvider.resolveUrl(entry.name);
132
- }
133
- catch {
134
- // skip
135
- }
136
- }
137
- }
138
- setThumbUrls(urls);
139
- }
140
- finally {
141
- setLoading(false);
142
- if (fileInputRef.current)
143
- fileInputRef.current.value = '';
144
- }
145
- }, [mediaProvider, onMediaUploaded]);
146
- return (_jsxs("div", { className: `squisq-media-bin${isDark ? ' squisq-media-bin--dark' : ''}`, children: [_jsxs("div", { className: "squisq-media-bin-header", children: [_jsxs("span", { className: "squisq-media-bin-title", children: ["Files ", entries.length > 0 && `(${entries.length})`] }), _jsx("button", { className: "squisq-media-bin-upload", onClick: handleUploadClick, disabled: !mediaProvider || loading, title: mediaProvider ? 'Upload files' : 'Load a content zip or select a storage slot first', children: "+ Upload" })] }), _jsxs("div", { className: "squisq-media-bin-list", children: [!mediaProvider && (_jsxs("div", { className: "squisq-media-bin-empty", children: ["No media context.", _jsx("br", {}), "Load a content zip or select a storage slot."] })), mediaProvider && entries.length === 0 && !loading && (_jsx("div", { className: "squisq-media-bin-empty", children: "No files yet." })), entries.map((entry) => {
147
- const thumb = thumbUrls[entry.name];
148
- const basename = entry.name.includes('/') ? entry.name.split('/').pop() : entry.name;
149
- const isImage = isImageMime(entry.mimeType);
150
- const altText = basename.replace(/\.[^.]+$/, '').replace(/[-_]/g, ' ');
151
- const handleDragStart = (e) => {
152
- if (!isImage)
153
- return;
154
- const payload = JSON.stringify({
155
- name: entry.name,
156
- mimeType: entry.mimeType,
157
- alt: altText,
158
- });
159
- e.dataTransfer.setData(SQUISQ_MEDIA_MIME, payload);
160
- e.dataTransfer.setData('text/plain', `![${altText}](${entry.name})`);
161
- e.dataTransfer.effectAllowed = 'copy';
162
- };
163
- return (_jsxs("div", { className: "squisq-media-bin-item", title: `${entry.name}\n${entry.mimeType}\n${formatSize(entry.size)}`, draggable: isImage, onDragStart: handleDragStart, children: [thumb ? (_jsx("img", { src: thumb, alt: basename, className: "squisq-media-bin-thumb", draggable: false })) : (_jsx("span", { className: "squisq-media-bin-icon", children: iconForMime(entry.mimeType) })), _jsxs("div", { className: "squisq-media-bin-meta", children: [_jsx("div", { className: "squisq-media-bin-name", children: basename }), _jsx("div", { className: "squisq-media-bin-size", children: formatSize(entry.size) })] })] }, entry.name));
164
- })] }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, style: { display: 'none' }, onChange: handleFileChange })] }));
165
- }
166
- //# sourceMappingURL=MediaBin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaBin.js","sourceRoot":"","sources":["../src/MediaBin.tsx"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * MentionExtension
3
- *
4
- * Tiptap mention configuration paired with a small absolutely-positioned
5
- * suggestion popover. Shares a caller-supplied async provider (see
6
- * `MentionProvider` in EditorContext) with the Monaco `@` completion
7
- * provider in `RawEditor`, so both editing modes surface the same roster.
8
- *
9
- * The mention chip renders as `<span data-mention data-kind data-id
10
- * data-label class="mention">@Label</span>`, matching the wire format that
11
- * `tiptapBridge` emits when converting markdown → Tiptap HTML. On serialize
12
- * back to markdown, the bridge emits `@[Label](kind:id)`.
13
- */
14
- import type { MentionProvider } from './EditorContext';
15
- /**
16
- * Build the Tiptap mention extension for an editor. The returned extension
17
- * captures a reference to `getProvider` at configure-time and calls it on
18
- * every keystroke — keep the reference stable so we don't recreate the
19
- * editor just to change who answers the `@` query.
20
- */
21
- export declare function buildMentionExtension(getProvider: () => MentionProvider | null): import("@tiptap/core").Node<import("@tiptap/extension-mention").MentionOptions<any, import("@tiptap/extension-mention").MentionNodeAttrs>, any>;
22
- //# sourceMappingURL=MentionExtension.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MentionExtension.d.ts","sourceRoot":"","sources":["../src/MentionExtension.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBzE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,eAAe,GAAG,IAAI,mJAwF9E"}
@@ -1,245 +0,0 @@
1
- /**
2
- * MentionExtension
3
- *
4
- * Tiptap mention configuration paired with a small absolutely-positioned
5
- * suggestion popover. Shares a caller-supplied async provider (see
6
- * `MentionProvider` in EditorContext) with the Monaco `@` completion
7
- * provider in `RawEditor`, so both editing modes surface the same roster.
8
- *
9
- * The mention chip renders as `<span data-mention data-kind data-id
10
- * data-label class="mention">@Label</span>`, matching the wire format that
11
- * `tiptapBridge` emits when converting markdown → Tiptap HTML. On serialize
12
- * back to markdown, the bridge emits `@[Label](kind:id)`.
13
- */
14
- import Mention from '@tiptap/extension-mention';
15
- import { PluginKey } from '@tiptap/pm/state';
16
- /**
17
- * Fallback namespace for defensive code paths — used when a mention node
18
- * somehow lacks a `kind` attribute (e.g. legacy HTML parsed without one).
19
- * Inserts from the suggestion popover always carry the candidate's own
20
- * `scheme`, so this only surfaces for malformed/legacy content.
21
- */
22
- const FALLBACK_KIND = 'mention';
23
- /**
24
- * Build the Tiptap mention extension for an editor. The returned extension
25
- * captures a reference to `getProvider` at configure-time and calls it on
26
- * every keystroke — keep the reference stable so we don't recreate the
27
- * editor just to change who answers the `@` query.
28
- */
29
- export function buildMentionExtension(getProvider) {
30
- return Mention.configure({
31
- HTMLAttributes: {
32
- class: 'mention',
33
- 'data-mention': 'true',
34
- },
35
- renderHTML({ options, node }) {
36
- const label = node.attrs.label ?? node.attrs.id ?? '';
37
- const id = node.attrs.id ?? '';
38
- const kind = node.attrs.kind ?? FALLBACK_KIND;
39
- return [
40
- 'span',
41
- {
42
- ...options.HTMLAttributes,
43
- 'data-kind': kind,
44
- 'data-id': id,
45
- 'data-label': label,
46
- },
47
- `@${label}`,
48
- ];
49
- },
50
- renderText({ node }) {
51
- const label = node.attrs.label ?? node.attrs.id ?? '';
52
- const id = node.attrs.id ?? '';
53
- const kind = node.attrs.kind ?? FALLBACK_KIND;
54
- return `@[${label}](${kind}:${id})`;
55
- },
56
- }).extend({
57
- addAttributes() {
58
- return {
59
- id: {
60
- default: null,
61
- parseHTML: (el) => el.getAttribute('data-id'),
62
- renderHTML: (attrs) => (attrs.id ? { 'data-id': attrs.id } : {}),
63
- },
64
- label: {
65
- default: null,
66
- parseHTML: (el) => el.getAttribute('data-label'),
67
- renderHTML: (attrs) => (attrs.label ? { 'data-label': attrs.label } : {}),
68
- },
69
- kind: {
70
- default: FALLBACK_KIND,
71
- parseHTML: (el) => el.getAttribute('data-kind') ?? FALLBACK_KIND,
72
- renderHTML: (attrs) => ({ 'data-kind': attrs.kind ?? FALLBACK_KIND }),
73
- },
74
- };
75
- },
76
- addOptions() {
77
- return {
78
- ...(this.parent?.() ?? {}),
79
- suggestion: {
80
- char: '@',
81
- // Custom plugin key so the mention suggestion doesn't collide
82
- // with any future `:` or `/` popovers.
83
- pluginKey: new PluginKey('mentionSuggestion'),
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
- command: ({ editor, range, props }) => {
86
- const id = props?.id ?? '';
87
- const label = props?.label ?? id;
88
- const kind = props?.kind ?? FALLBACK_KIND;
89
- editor
90
- .chain()
91
- .focus()
92
- .insertContentAt(range, [
93
- {
94
- type: 'mention',
95
- attrs: { id, label, kind },
96
- },
97
- { type: 'text', text: ' ' },
98
- ])
99
- .run();
100
- },
101
- items: async ({ query }) => {
102
- const provider = getProvider();
103
- if (!provider)
104
- return [];
105
- try {
106
- return await provider(query);
107
- }
108
- catch {
109
- return [];
110
- }
111
- },
112
- render: renderSuggestionFactory(),
113
- },
114
- };
115
- },
116
- });
117
- }
118
- /**
119
- * Lightweight suggestion popover. Uses a plain absolutely-positioned div
120
- * anchored to the caret rect — no tippy.js needed. Keyboard nav handled via
121
- * the `onKeyDown` hook Tiptap wires up.
122
- */
123
- function renderSuggestionFactory() {
124
- return () => {
125
- let container = null;
126
- let state = { items: [], selected: 0 };
127
- let currentProps = null;
128
- const update = () => {
129
- if (!container || !currentProps)
130
- return;
131
- container.innerHTML = '';
132
- if (state.items.length === 0) {
133
- container.style.display = 'none';
134
- return;
135
- }
136
- container.style.display = 'block';
137
- for (let i = 0; i < state.items.length; i++) {
138
- const item = state.items[i];
139
- const btn = document.createElement('button');
140
- btn.type = 'button';
141
- btn.className = 'squisq-mention-item' + (i === state.selected ? ' is-selected' : '');
142
- btn.dataset.index = String(i);
143
- btn.innerHTML = '';
144
- const label = document.createElement('span');
145
- label.className = 'squisq-mention-label';
146
- label.textContent = item.label;
147
- btn.appendChild(label);
148
- if (item.description) {
149
- const desc = document.createElement('span');
150
- desc.className = 'squisq-mention-desc';
151
- desc.textContent = item.description;
152
- btn.appendChild(desc);
153
- }
154
- btn.addEventListener('mousedown', (ev) => {
155
- ev.preventDefault();
156
- selectAt(i);
157
- });
158
- container.appendChild(btn);
159
- }
160
- positionTo(container, currentProps.clientRect);
161
- };
162
- const selectAt = (index) => {
163
- const item = state.items[index];
164
- if (!item || !currentProps)
165
- return;
166
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
- const command = currentProps.command;
168
- if (typeof command === 'function') {
169
- command({ id: item.id, label: item.label, kind: item.scheme });
170
- }
171
- };
172
- return {
173
- onStart: (props) => {
174
- currentProps = props;
175
- state = { items: props.items ?? [], selected: 0 };
176
- if (!container) {
177
- container = document.createElement('div');
178
- container.className = 'squisq-mention-popover';
179
- container.style.position = 'absolute';
180
- container.style.zIndex = '10000';
181
- document.body.appendChild(container);
182
- }
183
- update();
184
- },
185
- onUpdate: (props) => {
186
- currentProps = props;
187
- if (Array.isArray(props.items)) {
188
- state = { items: props.items, selected: 0 };
189
- }
190
- update();
191
- },
192
- onKeyDown: ({ event }) => {
193
- if (!state.items.length)
194
- return false;
195
- if (event.key === 'ArrowDown') {
196
- state.selected = (state.selected + 1) % state.items.length;
197
- update();
198
- return true;
199
- }
200
- if (event.key === 'ArrowUp') {
201
- state.selected = (state.selected - 1 + state.items.length) % state.items.length;
202
- update();
203
- return true;
204
- }
205
- if (event.key === 'Enter' || event.key === 'Tab') {
206
- selectAt(state.selected);
207
- return true;
208
- }
209
- if (event.key === 'Escape') {
210
- state = { items: [], selected: 0 };
211
- update();
212
- return true;
213
- }
214
- return false;
215
- },
216
- onExit: () => {
217
- if (container?.parentNode)
218
- container.parentNode.removeChild(container);
219
- container = null;
220
- currentProps = null;
221
- },
222
- };
223
- };
224
- }
225
- function positionTo(el, clientRect) {
226
- const rect = clientRect?.();
227
- if (!rect)
228
- return;
229
- // Anchor above the caret first — chat composers live near the
230
- // bottom of the viewport, where a "below" popover gets clipped or
231
- // covers the just-typed text. Fall back to below only when there's
232
- // no room above (top of a long document, etc.).
233
- const viewportH = window.innerHeight;
234
- const estH = Math.min(el.offsetHeight || 240, viewportH - 16);
235
- const above = rect.top - estH - 4;
236
- const fitsAbove = above >= 0;
237
- el.style.left = `${rect.left + window.scrollX}px`;
238
- if (fitsAbove) {
239
- el.style.top = `${above + window.scrollY}px`;
240
- }
241
- else {
242
- el.style.top = `${rect.bottom + 4 + window.scrollY}px`;
243
- }
244
- }
245
- //# sourceMappingURL=MentionExtension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MentionExtension.js","sourceRoot":"","sources":["../src/MentionExtension.tsx"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * OutlinePanel
3
- *
4
- * Left-side companion to the InlinePreviewGutter. Renders a hierarchical
5
- * tree of the document's headings (h1 → h2 → h3 …) so the structure is
6
- * graspable at a glance and the user can jump to any section. Works in
7
- * BOTH the WYSIWYG and Markdown editor views — view-specific positioning
8
- * lives in `useHeadingLayout`.
9
- */
10
- export interface OutlinePanelProps {
11
- /** Width of the pane in pixels (default: 240). */
12
- width?: number;
13
- /** Optional CSS class for the outer container. */
14
- className?: string;
15
- }
16
- export declare function OutlinePanel({ width, className }: OutlinePanelProps): import("react/jsx-runtime").JSX.Element;
17
- //# sourceMappingURL=OutlinePanel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OutlinePanel.d.ts","sourceRoot":"","sources":["../src/OutlinePanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAW,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAiEzE"}
@@ -1,167 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * OutlinePanel
4
- *
5
- * Left-side companion to the InlinePreviewGutter. Renders a hierarchical
6
- * tree of the document's headings (h1 → h2 → h3 …) so the structure is
7
- * graspable at a glance and the user can jump to any section. Works in
8
- * BOTH the WYSIWYG and Markdown editor views — view-specific positioning
9
- * lives in `useHeadingLayout`.
10
- */
11
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
12
- import { flattenBlocks, hasTemplate } from '@bendyline/squisq/doc';
13
- import { extractPlainText } from '@bendyline/squisq/markdown';
14
- import { useEditorContext } from './EditorContext';
15
- import { templateLabel } from './TemplatePicker';
16
- import { useHeadingLayout } from './useHeadingLayout';
17
- import { usePreviewSettingsOptional } from './PreviewControls';
18
- export function OutlinePanel({ width = 240, className }) {
19
- const { doc, markdownSource, setMarkdownSource } = useEditorContext();
20
- const paneRef = useRef(null);
21
- const { scrollToBlock } = useHeadingLayout(paneRef);
22
- const activeBlockId = useActiveOutlineBlockId();
23
- // Promote / demote the row's heading by rewriting just the `#` prefix
24
- // on the heading line. Falls through when the new depth would leave the
25
- // legal H1–H6 range, so the buttons disable themselves at the edges.
26
- // Both editor surfaces resync from `markdownSource` automatically.
27
- const changeHeadingLevel = useCallback((block, delta) => {
28
- const line = block.sourceHeading?.position?.start.line;
29
- if (typeof line !== 'number')
30
- return;
31
- const next = bumpHeadingLevelInSource(markdownSource, line, delta);
32
- if (next != null)
33
- setMarkdownSource(next);
34
- }, [markdownSource, setMarkdownSource]);
35
- // Inherit the active document theme's primary color so the current-row
36
- // highlight and template-name chips match the rest of the editor's
37
- // accent palette (e.g. warm-earth's terracotta) instead of the
38
- // hard-coded purple fallback. Falls through to the CSS defaults when
39
- // no PreviewSettingsProvider is mounted.
40
- const previewSettings = usePreviewSettingsOptional();
41
- const accentColor = previewSettings?.activeTheme?.colors?.primary;
42
- const isEmpty = !doc || doc.blocks.length === 0 || !hasAnyHeading(doc.blocks);
43
- const paneStyle = {
44
- width: `${width}px`,
45
- flex: `0 0 ${width}px`,
46
- overflow: 'auto',
47
- ...(accentColor
48
- ? { ['--squisq-outline-accent']: accentColor }
49
- : {}),
50
- };
51
- return (_jsx("aside", { ref: paneRef, className: `squisq-outline${className ? ` ${className}` : ''}`, style: paneStyle, "data-testid": "outline-panel", "aria-label": "Document outline", children: isEmpty ? (_jsx("div", { className: "squisq-outline-empty", children: _jsx("p", { children: "Add a heading to populate the outline." }) })) : (_jsx("ul", { className: "squisq-outline-tree", role: "tree", children: doc.blocks.map((b) => (_jsx(OutlineNode, { block: b, activeBlockId: activeBlockId, onSelect: scrollToBlock, onChangeLevel: changeHeadingLevel }, b.id))) })) }));
52
- }
53
- // ── Subcomponents ──────────────────────────────────────────────────
54
- function OutlineNode({ block, activeBlockId, onSelect, onChangeLevel, }) {
55
- const heading = block.sourceHeading;
56
- const depth = heading?.depth ?? 1;
57
- const text = heading ? extractPlainText(heading).trim() : '';
58
- const annotation = heading?.templateAnnotation;
59
- const tplName = annotation?.template;
60
- const showChip = tplName && hasTemplate(tplName);
61
- const isActive = block.id === activeBlockId;
62
- const canPromote = !!heading && depth > 1;
63
- const canDemote = !!heading && depth < 6;
64
- return (_jsxs("li", { className: "squisq-outline-item", role: "treeitem", "aria-current": isActive || undefined, children: [_jsxs("div", { className: "squisq-outline-row-wrap", children: [_jsxs("button", { type: "button", className: `squisq-outline-row squisq-outline-row--depth-${depth}${isActive ? ' squisq-outline-row--current' : ''}`, onClick: () => onSelect(block), title: text || '(empty heading)', children: [_jsx("span", { className: "squisq-outline-row-text", children: text || '(untitled)' }), showChip && (_jsx("span", { className: "squisq-outline-template-chip", children: templateLabel(tplName) }))] }), heading && (_jsxs("span", { className: "squisq-outline-row-actions", children: [_jsx("button", { type: "button", className: "squisq-outline-row-arrow", "aria-label": `Promote heading (currently H${depth})`, title: "Promote heading", disabled: !canPromote, onClick: () => onChangeLevel(block, -1), children: _jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M6.5 2.5 L3 5 L6.5 7.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) }) }), _jsx("button", { type: "button", className: "squisq-outline-row-arrow", "aria-label": `Demote heading (currently H${depth})`, title: "Demote heading", disabled: !canDemote, onClick: () => onChangeLevel(block, +1), children: _jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: _jsx("path", { d: "M3.5 2.5 L7 5 L3.5 7.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" }) }) })] }))] }), block.children && block.children.length > 0 && (_jsx("ul", { className: "squisq-outline-tree", children: block.children.map((child) => (_jsx(OutlineNode, { block: child, activeBlockId: activeBlockId, onSelect: onSelect, onChangeLevel: onChangeLevel }, child.id))) }))] }));
65
- }
66
- // ── Active-block tracking ──────────────────────────────────────────
67
- /**
68
- * Tracks which heading the user's cursor is currently inside (or most
69
- * recently passed). In WYSIWYG mode this watches Tiptap's selection;
70
- * in Raw mode it watches Monaco's cursor line. The Preview surface has
71
- * no cursor concept and reports `null`.
72
- *
73
- * The lookup mirrors the heading-pairing logic in `useHeadingLayout`:
74
- * the Nth heading in document order maps to `flattenBlocks(doc.blocks)[N]`.
75
- */
76
- function useActiveOutlineBlockId() {
77
- const { doc, activeView, tiptapEditor, monacoEditor } = useEditorContext();
78
- const flatBlocks = useMemo(() => (doc ? flattenBlocks(doc.blocks) : []), [doc]);
79
- const [activeId, setActiveId] = useState(null);
80
- // Reset whenever the active surface changes — a stale highlight from
81
- // the previous view would mislead the user before the new surface's
82
- // cursor handler runs.
83
- useEffect(() => {
84
- setActiveId(null);
85
- }, [activeView]);
86
- useEffect(() => {
87
- if (activeView !== 'wysiwyg' || !tiptapEditor)
88
- return;
89
- const update = () => {
90
- const { from } = tiptapEditor.state.selection;
91
- let lastIndex = -1;
92
- let seen = -1;
93
- tiptapEditor.state.doc.forEach((node, offset) => {
94
- if (node.type.name !== 'heading')
95
- return;
96
- seen += 1;
97
- if (offset <= from)
98
- lastIndex = seen;
99
- });
100
- const block = lastIndex >= 0 ? flatBlocks[lastIndex] : null;
101
- setActiveId(block?.id ?? null);
102
- };
103
- update();
104
- tiptapEditor.on('selectionUpdate', update);
105
- tiptapEditor.on('update', update);
106
- return () => {
107
- tiptapEditor.off('selectionUpdate', update);
108
- tiptapEditor.off('update', update);
109
- };
110
- }, [activeView, tiptapEditor, flatBlocks]);
111
- useEffect(() => {
112
- if (activeView !== 'raw' || !monacoEditor)
113
- return;
114
- const update = () => {
115
- const line = monacoEditor.getPosition()?.lineNumber;
116
- if (typeof line !== 'number') {
117
- setActiveId(null);
118
- return;
119
- }
120
- let lastIndex = -1;
121
- flatBlocks.forEach((b, i) => {
122
- const headingLine = b.sourceHeading?.position?.start.line;
123
- if (typeof headingLine === 'number' && headingLine <= line)
124
- lastIndex = i;
125
- });
126
- const block = lastIndex >= 0 ? flatBlocks[lastIndex] : null;
127
- setActiveId(block?.id ?? null);
128
- };
129
- update();
130
- const sub = monacoEditor.onDidChangeCursorPosition(update);
131
- return () => sub.dispose();
132
- }, [activeView, monacoEditor, flatBlocks]);
133
- return activeId;
134
- }
135
- // ── Helpers ────────────────────────────────────────────────────────
136
- function hasAnyHeading(blocks) {
137
- for (const b of blocks) {
138
- if (b.sourceHeading)
139
- return true;
140
- if (b.children && hasAnyHeading(b.children))
141
- return true;
142
- }
143
- return false;
144
- }
145
- /**
146
- * Rewrites just the leading `#` run on the given 1-based line, shifting
147
- * the heading depth by `delta`. Returns `null` when the line isn't an
148
- * ATX heading or the resulting depth would fall outside 1–6. Leaves the
149
- * rest of the line (including any `{[template]}` annotation) untouched.
150
- */
151
- function bumpHeadingLevelInSource(source, line, delta) {
152
- const lines = source.split('\n');
153
- const idx = line - 1;
154
- if (idx < 0 || idx >= lines.length)
155
- return null;
156
- const original = lines[idx];
157
- const match = original.match(/^(#{1,6})(\s|$)/);
158
- if (!match)
159
- return null;
160
- const currentDepth = match[1].length;
161
- const newDepth = currentDepth + delta;
162
- if (newDepth < 1 || newDepth > 6)
163
- return null;
164
- lines[idx] = '#'.repeat(newDepth) + original.slice(currentDepth);
165
- return lines.join('\n');
166
- }
167
- //# sourceMappingURL=OutlinePanel.js.map