@bendyline/squisq-editor-react 1.4.0 → 1.5.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.
Files changed (446) hide show
  1. package/dist/DocumentSettingsDialog.d.ts +26 -0
  2. package/dist/DocumentSettingsDialog.d.ts.map +1 -0
  3. package/dist/DocumentSettingsDialog.js +115 -0
  4. package/dist/DocumentSettingsDialog.js.map +1 -0
  5. package/dist/EditorContext.d.ts +248 -4
  6. package/dist/EditorContext.d.ts.map +1 -1
  7. package/dist/EditorContext.js +248 -10
  8. package/dist/EditorContext.js.map +1 -1
  9. package/dist/EditorShell.d.ts +173 -4
  10. package/dist/EditorShell.d.ts.map +1 -1
  11. package/dist/EditorShell.js +110 -10
  12. package/dist/EditorShell.js.map +1 -1
  13. package/dist/EmojiPicker.d.ts +50 -0
  14. package/dist/EmojiPicker.d.ts.map +1 -0
  15. package/dist/EmojiPicker.js +182 -0
  16. package/dist/EmojiPicker.js.map +1 -0
  17. package/dist/ImageEditor.d.ts +68 -0
  18. package/dist/ImageEditor.d.ts.map +1 -0
  19. package/dist/ImageEditor.js +166 -0
  20. package/dist/ImageEditor.js.map +1 -0
  21. package/dist/ImageNodeView.d.ts +13 -1
  22. package/dist/ImageNodeView.d.ts.map +1 -1
  23. package/dist/ImageNodeView.js +172 -19
  24. package/dist/ImageNodeView.js.map +1 -1
  25. package/dist/ImageViewer.d.ts +26 -0
  26. package/dist/ImageViewer.d.ts.map +1 -0
  27. package/dist/ImageViewer.js +119 -0
  28. package/dist/ImageViewer.js.map +1 -0
  29. package/dist/InlineIcon.d.ts +17 -0
  30. package/dist/InlineIcon.d.ts.map +1 -0
  31. package/dist/InlineIcon.js +72 -0
  32. package/dist/InlineIcon.js.map +1 -0
  33. package/dist/InlinePreviewGutter.d.ts +52 -0
  34. package/dist/InlinePreviewGutter.d.ts.map +1 -0
  35. package/dist/InlinePreviewGutter.js +397 -0
  36. package/dist/InlinePreviewGutter.js.map +1 -0
  37. package/dist/LinkDialog.d.ts +43 -0
  38. package/dist/LinkDialog.d.ts.map +1 -0
  39. package/dist/LinkDialog.js +102 -0
  40. package/dist/LinkDialog.js.map +1 -0
  41. package/dist/MentionExtension.js +10 -7
  42. package/dist/MentionExtension.js.map +1 -1
  43. package/dist/OutlinePanel.d.ts +17 -0
  44. package/dist/OutlinePanel.d.ts.map +1 -0
  45. package/dist/OutlinePanel.js +167 -0
  46. package/dist/OutlinePanel.js.map +1 -0
  47. package/dist/PlainHtmlPreview.d.ts +50 -0
  48. package/dist/PlainHtmlPreview.d.ts.map +1 -0
  49. package/dist/PlainHtmlPreview.js +155 -0
  50. package/dist/PlainHtmlPreview.js.map +1 -0
  51. package/dist/PreviewControls.d.ts +15 -1
  52. package/dist/PreviewControls.d.ts.map +1 -1
  53. package/dist/PreviewControls.js +75 -18
  54. package/dist/PreviewControls.js.map +1 -1
  55. package/dist/PreviewPanel.d.ts +11 -10
  56. package/dist/PreviewPanel.d.ts.map +1 -1
  57. package/dist/PreviewPanel.js +20 -17
  58. package/dist/PreviewPanel.js.map +1 -1
  59. package/dist/RawEditor.d.ts.map +1 -1
  60. package/dist/RawEditor.js +198 -4
  61. package/dist/RawEditor.js.map +1 -1
  62. package/dist/RecorderEntry.d.ts +24 -0
  63. package/dist/RecorderEntry.d.ts.map +1 -0
  64. package/dist/RecorderEntry.js +139 -0
  65. package/dist/RecorderEntry.js.map +1 -0
  66. package/dist/TemplateAnnotation.d.ts.map +1 -1
  67. package/dist/TemplateAnnotation.js +32 -6
  68. package/dist/TemplateAnnotation.js.map +1 -1
  69. package/dist/TemplatePicker.d.ts +53 -0
  70. package/dist/TemplatePicker.d.ts.map +1 -0
  71. package/dist/TemplatePicker.js +388 -0
  72. package/dist/TemplatePicker.js.map +1 -0
  73. package/dist/ThemeCustomizerPanel.d.ts +32 -0
  74. package/dist/ThemeCustomizerPanel.d.ts.map +1 -0
  75. package/dist/ThemeCustomizerPanel.js +256 -0
  76. package/dist/ThemeCustomizerPanel.js.map +1 -0
  77. package/dist/ThemePicker.d.ts +33 -0
  78. package/dist/ThemePicker.d.ts.map +1 -0
  79. package/dist/ThemePicker.js +148 -0
  80. package/dist/ThemePicker.js.map +1 -0
  81. package/dist/Toolbar.d.ts.map +1 -1
  82. package/dist/Toolbar.js +508 -33
  83. package/dist/Toolbar.js.map +1 -1
  84. package/dist/VersionHistoryPanel.d.ts +14 -0
  85. package/dist/VersionHistoryPanel.d.ts.map +1 -0
  86. package/dist/VersionHistoryPanel.js +147 -0
  87. package/dist/VersionHistoryPanel.js.map +1 -0
  88. package/dist/ViewMenuPanel.d.ts +13 -0
  89. package/dist/ViewMenuPanel.d.ts.map +1 -0
  90. package/dist/ViewMenuPanel.js +58 -0
  91. package/dist/ViewMenuPanel.js.map +1 -0
  92. package/dist/WysiwygEditor.d.ts.map +1 -1
  93. package/dist/WysiwygEditor.js +198 -9
  94. package/dist/WysiwygEditor.js.map +1 -1
  95. package/dist/__tests__/detectMarkdown.test.js +0 -14
  96. package/dist/__tests__/detectMarkdown.test.js.map +1 -1
  97. package/dist/__tests__/documentSettingsDialog.test.d.ts +2 -0
  98. package/dist/__tests__/documentSettingsDialog.test.d.ts.map +1 -0
  99. package/dist/__tests__/documentSettingsDialog.test.js +132 -0
  100. package/dist/__tests__/documentSettingsDialog.test.js.map +1 -0
  101. package/dist/__tests__/emojiPicker.test.d.ts +2 -0
  102. package/dist/__tests__/emojiPicker.test.d.ts.map +1 -0
  103. package/dist/__tests__/emojiPicker.test.js +111 -0
  104. package/dist/__tests__/emojiPicker.test.js.map +1 -0
  105. package/dist/__tests__/fileKind.test.js +13 -0
  106. package/dist/__tests__/fileKind.test.js.map +1 -1
  107. package/dist/__tests__/imageEditAffordance.test.d.ts +2 -0
  108. package/dist/__tests__/imageEditAffordance.test.d.ts.map +1 -0
  109. package/dist/__tests__/imageEditAffordance.test.js +188 -0
  110. package/dist/__tests__/imageEditAffordance.test.js.map +1 -0
  111. package/dist/__tests__/imageEditorShell.test.d.ts +2 -0
  112. package/dist/__tests__/imageEditorShell.test.d.ts.map +1 -0
  113. package/dist/__tests__/imageEditorShell.test.js +52 -0
  114. package/dist/__tests__/imageEditorShell.test.js.map +1 -0
  115. package/dist/__tests__/imageEditorState.test.d.ts +3 -0
  116. package/dist/__tests__/imageEditorState.test.d.ts.map +1 -0
  117. package/dist/__tests__/imageEditorState.test.js +148 -0
  118. package/dist/__tests__/imageEditorState.test.js.map +1 -0
  119. package/dist/__tests__/inlinePreviewGutter.test.d.ts +2 -0
  120. package/dist/__tests__/inlinePreviewGutter.test.d.ts.map +1 -0
  121. package/dist/__tests__/inlinePreviewGutter.test.js +51 -0
  122. package/dist/__tests__/inlinePreviewGutter.test.js.map +1 -0
  123. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts +2 -0
  124. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts.map +1 -0
  125. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js +63 -0
  126. package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js.map +1 -0
  127. package/dist/__tests__/jsonEditor.test.d.ts +2 -0
  128. package/dist/__tests__/jsonEditor.test.d.ts.map +1 -0
  129. package/dist/__tests__/jsonEditor.test.js +134 -0
  130. package/dist/__tests__/jsonEditor.test.js.map +1 -0
  131. package/dist/__tests__/layersPanel.test.d.ts +2 -0
  132. package/dist/__tests__/layersPanel.test.d.ts.map +1 -0
  133. package/dist/__tests__/layersPanel.test.js +84 -0
  134. package/dist/__tests__/layersPanel.test.js.map +1 -0
  135. package/dist/__tests__/linkDialogDocPicker.test.d.ts +7 -0
  136. package/dist/__tests__/linkDialogDocPicker.test.d.ts.map +1 -0
  137. package/dist/__tests__/linkDialogDocPicker.test.js +75 -0
  138. package/dist/__tests__/linkDialogDocPicker.test.js.map +1 -0
  139. package/dist/__tests__/outlinePanel.test.d.ts +2 -0
  140. package/dist/__tests__/outlinePanel.test.d.ts.map +1 -0
  141. package/dist/__tests__/outlinePanel.test.js +68 -0
  142. package/dist/__tests__/outlinePanel.test.js.map +1 -0
  143. package/dist/__tests__/plainHtmlPreview.test.d.ts +2 -0
  144. package/dist/__tests__/plainHtmlPreview.test.d.ts.map +1 -0
  145. package/dist/__tests__/plainHtmlPreview.test.js +87 -0
  146. package/dist/__tests__/plainHtmlPreview.test.js.map +1 -0
  147. package/dist/__tests__/propertiesPanel.test.d.ts +2 -0
  148. package/dist/__tests__/propertiesPanel.test.d.ts.map +1 -0
  149. package/dist/__tests__/propertiesPanel.test.js +64 -0
  150. package/dist/__tests__/propertiesPanel.test.js.map +1 -0
  151. package/dist/__tests__/recorderFormats.test.d.ts +2 -0
  152. package/dist/__tests__/recorderFormats.test.d.ts.map +1 -0
  153. package/dist/__tests__/recorderFormats.test.js +121 -0
  154. package/dist/__tests__/recorderFormats.test.js.map +1 -0
  155. package/dist/__tests__/recorderTimingJson.test.d.ts +2 -0
  156. package/dist/__tests__/recorderTimingJson.test.d.ts.map +1 -0
  157. package/dist/__tests__/recorderTimingJson.test.js +37 -0
  158. package/dist/__tests__/recorderTimingJson.test.js.map +1 -0
  159. package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts +2 -0
  160. package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts.map +1 -0
  161. package/dist/__tests__/templateAnnotationRoundTrip.test.js +31 -0
  162. package/dist/__tests__/templateAnnotationRoundTrip.test.js.map +1 -0
  163. package/dist/__tests__/tiptapBridge.test.js +13 -0
  164. package/dist/__tests__/tiptapBridge.test.js.map +1 -1
  165. package/dist/__tests__/useImageEditor.test.d.ts +2 -0
  166. package/dist/__tests__/useImageEditor.test.d.ts.map +1 -0
  167. package/dist/__tests__/useImageEditor.test.js +131 -0
  168. package/dist/__tests__/useImageEditor.test.js.map +1 -0
  169. package/dist/__tests__/useMediaRecorder.test.d.ts +2 -0
  170. package/dist/__tests__/useMediaRecorder.test.d.ts.map +1 -0
  171. package/dist/__tests__/useMediaRecorder.test.js +153 -0
  172. package/dist/__tests__/useMediaRecorder.test.js.map +1 -0
  173. package/dist/__tests__/versionHistory.test.d.ts +2 -0
  174. package/dist/__tests__/versionHistory.test.d.ts.map +1 -0
  175. package/dist/__tests__/versionHistory.test.js +124 -0
  176. package/dist/__tests__/versionHistory.test.js.map +1 -0
  177. package/dist/blockSlice.d.ts +24 -0
  178. package/dist/blockSlice.d.ts.map +1 -0
  179. package/dist/blockSlice.js +63 -0
  180. package/dist/blockSlice.js.map +1 -0
  181. package/dist/buildPreviewDoc.d.ts.map +1 -1
  182. package/dist/buildPreviewDoc.js +52 -2
  183. package/dist/buildPreviewDoc.js.map +1 -1
  184. package/dist/emojiData.d.ts +81 -0
  185. package/dist/emojiData.d.ts.map +1 -0
  186. package/dist/emojiData.js +1283 -0
  187. package/dist/emojiData.js.map +1 -0
  188. package/dist/fileKind.d.ts +6 -2
  189. package/dist/fileKind.d.ts.map +1 -1
  190. package/dist/fileKind.js +25 -4
  191. package/dist/fileKind.js.map +1 -1
  192. package/dist/hooks/useFileDrop.d.ts.map +1 -1
  193. package/dist/hooks/useFileDrop.js +40 -4
  194. package/dist/hooks/useFileDrop.js.map +1 -1
  195. package/dist/imageEditor/CanvasSurface.d.ts +31 -0
  196. package/dist/imageEditor/CanvasSurface.d.ts.map +1 -0
  197. package/dist/imageEditor/CanvasSurface.js +264 -0
  198. package/dist/imageEditor/CanvasSurface.js.map +1 -0
  199. package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts +39 -0
  200. package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts.map +1 -0
  201. package/dist/imageEditor/ImageVersionHistoryDropdown.js +283 -0
  202. package/dist/imageEditor/ImageVersionHistoryDropdown.js.map +1 -0
  203. package/dist/imageEditor/LayersPanel.d.ts +14 -0
  204. package/dist/imageEditor/LayersPanel.d.ts.map +1 -0
  205. package/dist/imageEditor/LayersPanel.js +43 -0
  206. package/dist/imageEditor/LayersPanel.js.map +1 -0
  207. package/dist/imageEditor/PropertiesPanel.d.ts +14 -0
  208. package/dist/imageEditor/PropertiesPanel.d.ts.map +1 -0
  209. package/dist/imageEditor/PropertiesPanel.js +97 -0
  210. package/dist/imageEditor/PropertiesPanel.js.map +1 -0
  211. package/dist/imageEditor/Toolbar.d.ts +30 -0
  212. package/dist/imageEditor/Toolbar.d.ts.map +1 -0
  213. package/dist/imageEditor/Toolbar.js +108 -0
  214. package/dist/imageEditor/Toolbar.js.map +1 -0
  215. package/dist/imageEditor/icons.d.ts +24 -0
  216. package/dist/imageEditor/icons.d.ts.map +1 -0
  217. package/dist/imageEditor/icons.js +45 -0
  218. package/dist/imageEditor/icons.js.map +1 -0
  219. package/dist/imageEditor/layers/EditorImageLayer.d.ts +16 -0
  220. package/dist/imageEditor/layers/EditorImageLayer.d.ts.map +1 -0
  221. package/dist/imageEditor/layers/EditorImageLayer.js +37 -0
  222. package/dist/imageEditor/layers/EditorImageLayer.js.map +1 -0
  223. package/dist/imageEditor/layers/EditorShapeLayer.d.ts +15 -0
  224. package/dist/imageEditor/layers/EditorShapeLayer.d.ts.map +1 -0
  225. package/dist/imageEditor/layers/EditorShapeLayer.js +20 -0
  226. package/dist/imageEditor/layers/EditorShapeLayer.js.map +1 -0
  227. package/dist/imageEditor/layers/EditorTextLayer.d.ts +18 -0
  228. package/dist/imageEditor/layers/EditorTextLayer.d.ts.map +1 -0
  229. package/dist/imageEditor/layers/EditorTextLayer.js +13 -0
  230. package/dist/imageEditor/layers/EditorTextLayer.js.map +1 -0
  231. package/dist/imageEditor/layers/SelectionHandles.d.ts +17 -0
  232. package/dist/imageEditor/layers/SelectionHandles.d.ts.map +1 -0
  233. package/dist/imageEditor/layers/SelectionHandles.js +19 -0
  234. package/dist/imageEditor/layers/SelectionHandles.js.map +1 -0
  235. package/dist/imageEditor/state.d.ts +76 -0
  236. package/dist/imageEditor/state.d.ts.map +1 -0
  237. package/dist/imageEditor/state.js +87 -0
  238. package/dist/imageEditor/state.js.map +1 -0
  239. package/dist/imageEditor/useImageEditor.d.ts +53 -0
  240. package/dist/imageEditor/useImageEditor.d.ts.map +1 -0
  241. package/dist/imageEditor/useImageEditor.js +244 -0
  242. package/dist/imageEditor/useImageEditor.js.map +1 -0
  243. package/dist/imageEditor/useImageEditorTokens.d.ts +16 -0
  244. package/dist/imageEditor/useImageEditorTokens.d.ts.map +1 -0
  245. package/dist/imageEditor/useImageEditorTokens.js +45 -0
  246. package/dist/imageEditor/useImageEditorTokens.js.map +1 -0
  247. package/dist/index.d.ts +48 -1
  248. package/dist/index.d.ts.map +1 -1
  249. package/dist/index.js +36 -0
  250. package/dist/index.js.map +1 -1
  251. package/dist/jsonEditor/EmbeddedRichTextField.d.ts +15 -0
  252. package/dist/jsonEditor/EmbeddedRichTextField.d.ts.map +1 -0
  253. package/dist/jsonEditor/EmbeddedRichTextField.js +74 -0
  254. package/dist/jsonEditor/EmbeddedRichTextField.js.map +1 -0
  255. package/dist/jsonEditor/JsonEditor.d.ts +36 -0
  256. package/dist/jsonEditor/JsonEditor.d.ts.map +1 -0
  257. package/dist/jsonEditor/JsonEditor.js +15 -0
  258. package/dist/jsonEditor/JsonEditor.js.map +1 -0
  259. package/dist/jsonEditor/JsonEditorContext.d.ts +28 -0
  260. package/dist/jsonEditor/JsonEditorContext.d.ts.map +1 -0
  261. package/dist/jsonEditor/JsonEditorContext.js +41 -0
  262. package/dist/jsonEditor/JsonEditorContext.js.map +1 -0
  263. package/dist/jsonEditor/RenderNode.d.ts +16 -0
  264. package/dist/jsonEditor/RenderNode.d.ts.map +1 -0
  265. package/dist/jsonEditor/RenderNode.js +32 -0
  266. package/dist/jsonEditor/RenderNode.js.map +1 -0
  267. package/dist/jsonEditor/editors.d.ts +36 -0
  268. package/dist/jsonEditor/editors.d.ts.map +1 -0
  269. package/dist/jsonEditor/editors.js +347 -0
  270. package/dist/jsonEditor/editors.js.map +1 -0
  271. package/dist/jsonEditor/index.d.ts +3 -0
  272. package/dist/jsonEditor/index.d.ts.map +1 -0
  273. package/dist/jsonEditor/index.js +2 -0
  274. package/dist/jsonEditor/index.js.map +1 -0
  275. package/dist/jsonEditor/useJsonEditorTokens.d.ts +13 -0
  276. package/dist/jsonEditor/useJsonEditorTokens.d.ts.map +1 -0
  277. package/dist/jsonEditor/useJsonEditorTokens.js +38 -0
  278. package/dist/jsonEditor/useJsonEditorTokens.js.map +1 -0
  279. package/dist/recorder/RecorderButton.d.ts +31 -0
  280. package/dist/recorder/RecorderButton.d.ts.map +1 -0
  281. package/dist/recorder/RecorderButton.js +24 -0
  282. package/dist/recorder/RecorderButton.js.map +1 -0
  283. package/dist/recorder/RecorderModal.d.ts +59 -0
  284. package/dist/recorder/RecorderModal.d.ts.map +1 -0
  285. package/dist/recorder/RecorderModal.js +333 -0
  286. package/dist/recorder/RecorderModal.js.map +1 -0
  287. package/dist/recorder/RecorderPanel.d.ts +25 -0
  288. package/dist/recorder/RecorderPanel.d.ts.map +1 -0
  289. package/dist/recorder/RecorderPanel.js +30 -0
  290. package/dist/recorder/RecorderPanel.js.map +1 -0
  291. package/dist/recorder/formats.d.ts +51 -0
  292. package/dist/recorder/formats.d.ts.map +1 -0
  293. package/dist/recorder/formats.js +144 -0
  294. package/dist/recorder/formats.js.map +1 -0
  295. package/dist/recorder/hooks/useMediaRecorder.d.ts +90 -0
  296. package/dist/recorder/hooks/useMediaRecorder.d.ts.map +1 -0
  297. package/dist/recorder/hooks/useMediaRecorder.js +277 -0
  298. package/dist/recorder/hooks/useMediaRecorder.js.map +1 -0
  299. package/dist/recorder/hooks/useStreamPreview.d.ts +22 -0
  300. package/dist/recorder/hooks/useStreamPreview.d.ts.map +1 -0
  301. package/dist/recorder/hooks/useStreamPreview.js +44 -0
  302. package/dist/recorder/hooks/useStreamPreview.js.map +1 -0
  303. package/dist/recorder/sources/cameraStream.d.ts +22 -0
  304. package/dist/recorder/sources/cameraStream.d.ts.map +1 -0
  305. package/dist/recorder/sources/cameraStream.js +24 -0
  306. package/dist/recorder/sources/cameraStream.js.map +1 -0
  307. package/dist/recorder/sources/micStream.d.ts +15 -0
  308. package/dist/recorder/sources/micStream.d.ts.map +1 -0
  309. package/dist/recorder/sources/micStream.js +24 -0
  310. package/dist/recorder/sources/micStream.js.map +1 -0
  311. package/dist/recorder/sources/screenStream.d.ts +53 -0
  312. package/dist/recorder/sources/screenStream.d.ts.map +1 -0
  313. package/dist/recorder/sources/screenStream.js +114 -0
  314. package/dist/recorder/sources/screenStream.js.map +1 -0
  315. package/dist/recorder/timingJson.d.ts +51 -0
  316. package/dist/recorder/timingJson.d.ts.map +1 -0
  317. package/dist/recorder/timingJson.js +42 -0
  318. package/dist/recorder/timingJson.js.map +1 -0
  319. package/dist/tiptap/TiptapAudio.d.ts +26 -0
  320. package/dist/tiptap/TiptapAudio.d.ts.map +1 -0
  321. package/dist/tiptap/TiptapAudio.js +58 -0
  322. package/dist/tiptap/TiptapAudio.js.map +1 -0
  323. package/dist/tiptap/TiptapVideo.d.ts +30 -0
  324. package/dist/tiptap/TiptapVideo.d.ts.map +1 -0
  325. package/dist/tiptap/TiptapVideo.js +66 -0
  326. package/dist/tiptap/TiptapVideo.js.map +1 -0
  327. package/dist/tiptap/useResolvedMediaSrc.d.ts +2 -0
  328. package/dist/tiptap/useResolvedMediaSrc.d.ts.map +1 -0
  329. package/dist/tiptap/useResolvedMediaSrc.js +42 -0
  330. package/dist/tiptap/useResolvedMediaSrc.js.map +1 -0
  331. package/dist/tiptapBridge.d.ts.map +1 -1
  332. package/dist/tiptapBridge.js +171 -14
  333. package/dist/tiptapBridge.js.map +1 -1
  334. package/dist/useHeadingLayout.d.ts +54 -0
  335. package/dist/useHeadingLayout.d.ts.map +1 -0
  336. package/dist/useHeadingLayout.js +260 -0
  337. package/dist/useHeadingLayout.js.map +1 -0
  338. package/dist/utils/collectInlineFontAwesomeCss.d.ts +21 -0
  339. package/dist/utils/collectInlineFontAwesomeCss.d.ts.map +1 -0
  340. package/dist/utils/collectInlineFontAwesomeCss.js +68 -0
  341. package/dist/utils/collectInlineFontAwesomeCss.js.map +1 -0
  342. package/dist/utils/dropUtils.d.ts +21 -2
  343. package/dist/utils/dropUtils.d.ts.map +1 -1
  344. package/dist/utils/dropUtils.js +43 -4
  345. package/dist/utils/dropUtils.js.map +1 -1
  346. package/dist/utils/normalizeMalformedAssetUrl.d.ts +15 -0
  347. package/dist/utils/normalizeMalformedAssetUrl.d.ts.map +1 -0
  348. package/dist/utils/normalizeMalformedAssetUrl.js +27 -0
  349. package/dist/utils/normalizeMalformedAssetUrl.js.map +1 -0
  350. package/package.json +8 -5
  351. package/src/DocumentSettingsDialog.tsx +266 -0
  352. package/src/EditorContext.tsx +534 -10
  353. package/src/EditorShell.tsx +571 -55
  354. package/src/EmojiPicker.tsx +332 -0
  355. package/src/ImageEditor.tsx +327 -0
  356. package/src/ImageNodeView.tsx +222 -21
  357. package/src/ImageViewer.tsx +221 -0
  358. package/src/InlineIcon.ts +84 -0
  359. package/src/InlinePreviewGutter.tsx +582 -0
  360. package/src/LinkDialog.tsx +276 -0
  361. package/src/MentionExtension.tsx +10 -7
  362. package/src/OutlinePanel.tsx +295 -0
  363. package/src/PlainHtmlPreview.tsx +211 -0
  364. package/src/PreviewControls.tsx +130 -24
  365. package/src/PreviewPanel.tsx +38 -21
  366. package/src/RawEditor.tsx +215 -4
  367. package/src/RecorderEntry.tsx +164 -0
  368. package/src/TemplateAnnotation.ts +32 -6
  369. package/src/TemplatePicker.tsx +818 -0
  370. package/src/ThemeCustomizerPanel.tsx +595 -0
  371. package/src/ThemePicker.tsx +319 -0
  372. package/src/Toolbar.tsx +708 -111
  373. package/src/VersionHistoryPanel.tsx +329 -0
  374. package/src/ViewMenuPanel.tsx +188 -0
  375. package/src/WysiwygEditor.tsx +229 -9
  376. package/src/__tests__/detectMarkdown.test.ts +0 -15
  377. package/src/__tests__/documentSettingsDialog.test.tsx +147 -0
  378. package/src/__tests__/emojiPicker.test.tsx +133 -0
  379. package/src/__tests__/fileKind.test.ts +16 -0
  380. package/src/__tests__/imageEditAffordance.test.tsx +268 -0
  381. package/src/__tests__/imageEditorShell.test.tsx +57 -0
  382. package/src/__tests__/imageEditorState.test.ts +171 -0
  383. package/src/__tests__/inlinePreviewGutter.test.tsx +62 -0
  384. package/src/__tests__/inlinePreviewGutterAllBlocks.test.tsx +103 -0
  385. package/src/__tests__/jsonEditor.test.tsx +168 -0
  386. package/src/__tests__/layersPanel.test.tsx +97 -0
  387. package/src/__tests__/linkDialogDocPicker.test.tsx +137 -0
  388. package/src/__tests__/outlinePanel.test.tsx +79 -0
  389. package/src/__tests__/plainHtmlPreview.test.tsx +107 -0
  390. package/src/__tests__/propertiesPanel.test.tsx +69 -0
  391. package/src/__tests__/recorderFormats.test.ts +146 -0
  392. package/src/__tests__/recorderTimingJson.test.ts +41 -0
  393. package/src/__tests__/templateAnnotationRoundTrip.test.ts +34 -0
  394. package/src/__tests__/tiptapBridge.test.ts +15 -0
  395. package/src/__tests__/useImageEditor.test.tsx +159 -0
  396. package/src/__tests__/useMediaRecorder.test.ts +186 -0
  397. package/src/__tests__/versionHistory.test.tsx +197 -0
  398. package/src/blockSlice.ts +75 -0
  399. package/src/buildPreviewDoc.ts +61 -6
  400. package/src/emojiData.ts +1337 -0
  401. package/src/fileKind.ts +30 -6
  402. package/src/hooks/useFileDrop.ts +40 -4
  403. package/src/imageEditor/CanvasSurface.tsx +402 -0
  404. package/src/imageEditor/ImageVersionHistoryDropdown.tsx +396 -0
  405. package/src/imageEditor/LayersPanel.tsx +143 -0
  406. package/src/imageEditor/PropertiesPanel.tsx +428 -0
  407. package/src/imageEditor/Toolbar.tsx +242 -0
  408. package/src/imageEditor/icons.tsx +144 -0
  409. package/src/imageEditor/image-editor.css +450 -0
  410. package/src/imageEditor/layers/EditorImageLayer.tsx +45 -0
  411. package/src/imageEditor/layers/EditorShapeLayer.tsx +62 -0
  412. package/src/imageEditor/layers/EditorTextLayer.tsx +45 -0
  413. package/src/imageEditor/layers/SelectionHandles.tsx +86 -0
  414. package/src/imageEditor/state.ts +153 -0
  415. package/src/imageEditor/useImageEditor.ts +328 -0
  416. package/src/imageEditor/useImageEditorTokens.ts +70 -0
  417. package/src/index.ts +82 -0
  418. package/src/jsonEditor/EmbeddedRichTextField.tsx +81 -0
  419. package/src/jsonEditor/JsonEditor.tsx +81 -0
  420. package/src/jsonEditor/JsonEditorContext.tsx +75 -0
  421. package/src/jsonEditor/RenderNode.tsx +66 -0
  422. package/src/jsonEditor/editors.tsx +678 -0
  423. package/src/jsonEditor/index.ts +2 -0
  424. package/src/jsonEditor/json-editor.css +463 -0
  425. package/src/jsonEditor/useJsonEditorTokens.ts +63 -0
  426. package/src/recorder/RecorderButton.tsx +72 -0
  427. package/src/recorder/RecorderModal.tsx +596 -0
  428. package/src/recorder/RecorderPanel.tsx +93 -0
  429. package/src/recorder/formats.ts +159 -0
  430. package/src/recorder/hooks/useMediaRecorder.ts +378 -0
  431. package/src/recorder/hooks/useStreamPreview.ts +47 -0
  432. package/src/recorder/sources/cameraStream.ts +32 -0
  433. package/src/recorder/sources/micStream.ts +25 -0
  434. package/src/recorder/sources/screenStream.ts +162 -0
  435. package/src/recorder/timingJson.ts +66 -0
  436. package/src/styles/editor.css +2490 -51
  437. package/src/styles/image-edit-affordance.css +201 -0
  438. package/src/styles/index.css +10 -0
  439. package/src/tiptap/TiptapAudio.tsx +86 -0
  440. package/src/tiptap/TiptapVideo.tsx +119 -0
  441. package/src/tiptap/useResolvedMediaSrc.ts +47 -0
  442. package/src/tiptapBridge.ts +188 -20
  443. package/src/useHeadingLayout.ts +294 -0
  444. package/src/utils/collectInlineFontAwesomeCss.ts +69 -0
  445. package/src/utils/dropUtils.ts +54 -6
  446. package/src/utils/normalizeMalformedAssetUrl.ts +22 -0
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * EditorShell
4
4
  *
@@ -6,37 +6,67 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
6
6
  * views, and StatusBar into a complete editing experience. Wraps everything
7
7
  * in an EditorProvider for shared state.
8
8
  */
9
- import { useEffect, useState, useCallback } from 'react';
9
+ import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
10
10
  import { EditorProvider, useEditorContext, } from './EditorContext';
11
11
  import { Toolbar } from './Toolbar';
12
12
  import { StatusBar } from './StatusBar';
13
13
  import { RawEditor } from './RawEditor';
14
14
  import { WysiwygEditor } from './WysiwygEditor';
15
+ import { InlinePreviewGutter } from './InlinePreviewGutter';
16
+ import { OutlinePanel } from './OutlinePanel';
15
17
  import { PreviewPanel } from './PreviewPanel';
18
+ import { ImageViewer } from './ImageViewer';
19
+ import { ImageEditor } from './ImageEditor';
16
20
  import { PreviewSettingsProvider, PreviewToolbarControls } from './PreviewControls';
17
21
  import { MediaBin } from './MediaBin';
18
22
  import { DropZoneOverlay } from './DropZoneOverlay';
19
23
  import { TooltipLayer } from './Tooltip';
20
24
  import { useFileDrop } from './hooks/useFileDrop';
21
25
  import { partitionFiles, processMediaFiles, processTextFile, processTextFiles, } from './utils/dropUtils';
26
+ import { DARK_SURFACE, LIGHT_SURFACE } from '@bendyline/squisq/schemas';
27
+ import { MemoryContentContainer, scopeContainer, createMediaProviderFromContainer, } from '@bendyline/squisq/storage';
22
28
  /**
23
29
  * Complete markdown editor shell with toolbar, view switcher, and three
24
30
  * editing modes: Raw (Monaco), WYSIWYG (Tiptap), and Preview.
25
31
  */
26
- export function EditorShell({ initialMarkdown = '', initialView = 'wysiwyg', articleId = 'untitled', basePath = '/', onChange, theme = 'light', className, height = '100vh', minHeight, maxHeight, mediaProvider, container, showFilesToggle, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, showPlayTab = true, submitOnEnter, fullWidth = false, uxFont, thinMargins = false, showStatusBar = true, imageDisplayMode = 'inline', fileName, language, mentionProvider, placeholder, readOnly = false, }) {
32
+ export function EditorShell({ initialMarkdown = '', initialView = 'wysiwyg', articleId = 'untitled', basePath = '/', onChange, theme = 'light', className, height = '100vh', minHeight, maxHeight, mediaProvider, workspaceContainer, container, allowVersioning = false, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, showFilesToggle, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, showPlayTab = true, submitOnEnter, fullWidth = false, uxFont, thinMargins = false, showStatusBar = true, imageDisplayMode = 'inline', fileName, language, mentionProvider, documentLinkProvider, allowRecording = true, placeholder, readOnly = false, imageSrc, imageAlt, imageMode = 'view', imageEditorContainer, onImageExport, inlinePreview = false, inlinePreviewWidth = 320, outline = false, outlineWidth = 240, blockTags = true, themeInheritance = 'fonts', viewPreferences, onViewPreferencesChange, themeOverride = null, }) {
33
+ const effectiveContainer = workspaceContainer ?? container ?? null;
34
+ // If the host gave us a `workspaceContainer` but no explicit `mediaProvider`,
35
+ // derive one automatically. Without this, drag-and-drop of an image
36
+ // into the editor silently failed (no provider \u2192 nothing to upload to)
37
+ // even though we had a perfectly good ContentContainer to write into.
38
+ const effectiveMediaProvider = useMemo(() => {
39
+ if (mediaProvider !== undefined)
40
+ return mediaProvider;
41
+ if (effectiveContainer)
42
+ return createMediaProviderFromContainer(effectiveContainer);
43
+ return undefined;
44
+ }, [mediaProvider, effectiveContainer]);
27
45
  // Show the toggle when explicitly opted in, or when mediaProvider prop was passed at all
28
- const filesToggleEnabled = showFilesToggle ?? mediaProvider !== undefined;
46
+ const filesToggleEnabled = showFilesToggle ?? effectiveMediaProvider !== undefined;
29
47
  // If the host hides the Play tab but asked for it as the initial view,
30
48
  // fall back to wysiwyg so we don't boot into a tab the user can't leave.
31
49
  const effectiveInitialView = !showPlayTab && initialView === 'preview' ? 'wysiwyg' : initialView;
32
- return (_jsx(EditorProvider, { initialMarkdown: initialMarkdown, initialView: effectiveInitialView, articleId: articleId, theme: theme, mediaProvider: mediaProvider, imageDisplayMode: imageDisplayMode, mentionProvider: mentionProvider, fileName: fileName, language: language, children: _jsx(EditorShellInner, { basePath: basePath, onChange: onChange, className: className, height: height, minHeight: minHeight, maxHeight: maxHeight, placeholder: placeholder, mediaProvider: mediaProvider ?? null, container: container, filesToggleEnabled: filesToggleEnabled, toolbarSlotLeft: toolbarSlotLeft, toolbarSlotAfterActions: toolbarSlotAfterActions, toolbarSlotRight: toolbarSlotRight, showPlayTab: showPlayTab, submitOnEnter: submitOnEnter, fullWidth: fullWidth, uxFont: uxFont, thinMargins: thinMargins, showStatusBar: showStatusBar, readOnly: readOnly }) }));
50
+ return (_jsx(EditorProvider, { initialMarkdown: initialMarkdown, initialView: effectiveInitialView, articleId: articleId, theme: theme, workspaceContainer: effectiveContainer, allowVersioning: allowVersioning, versionBasename: versionBasename, versioningPrunePolicy: versioningPrunePolicy, versioningAutoSaveIdleMs: versioningAutoSaveIdleMs, onSaveVersion: onSaveVersion, mediaProvider: effectiveMediaProvider, imageDisplayMode: imageDisplayMode, mentionProvider: mentionProvider, documentLinkProvider: documentLinkProvider, allowRecording: allowRecording, fileName: fileName, language: language, inlinePreview: inlinePreview, showStatusBar: showStatusBar, outline: outline, blockTags: blockTags, themeInheritance: themeInheritance, viewPreferences: viewPreferences, onViewPreferencesChange: onViewPreferencesChange, children: _jsx(EditorShellInner, { basePath: basePath, onChange: onChange, className: className, height: height, minHeight: minHeight, maxHeight: maxHeight, placeholder: placeholder, mediaProvider: effectiveMediaProvider ?? null, workspaceContainer: effectiveContainer, filesToggleEnabled: filesToggleEnabled, toolbarSlotLeft: toolbarSlotLeft, toolbarSlotAfterActions: toolbarSlotAfterActions, toolbarSlotRight: toolbarSlotRight, showPlayTab: showPlayTab, submitOnEnter: submitOnEnter, fullWidth: fullWidth, uxFont: uxFont, thinMargins: thinMargins, readOnly: readOnly, imageSrc: imageSrc, imageAlt: imageAlt, imageMode: imageMode, imageEditorContainer: imageEditorContainer, onImageExport: onImageExport, allowVersioning: allowVersioning, versioningAutoSaveIdleMs: versioningAutoSaveIdleMs, inlinePreviewWidth: inlinePreviewWidth, outlineWidth: outlineWidth, themeOverride: themeOverride }) }));
33
51
  }
34
- function EditorShellInner({ basePath, onChange, className, height, minHeight, maxHeight, placeholder, mediaProvider, container, filesToggleEnabled, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, showPlayTab, submitOnEnter, fullWidth, uxFont, thinMargins, showStatusBar, readOnly, }) {
35
- const { activeView, markdownSource, doc, theme, editorMode, insertAtCursor, replaceAll, tiptapEditor, monacoEditor, setMarkdownSource, } = useEditorContext();
52
+ function EditorShellInner({ basePath, onChange, className, height, minHeight, maxHeight, placeholder, mediaProvider, workspaceContainer, filesToggleEnabled, toolbarSlotLeft, toolbarSlotAfterActions, toolbarSlotRight, showPlayTab, submitOnEnter, fullWidth, uxFont, thinMargins, readOnly, imageSrc, imageAlt, imageMode, imageEditorContainer, onImageExport, allowVersioning, versioningAutoSaveIdleMs, inlinePreviewWidth, outlineWidth, themeOverride, }) {
53
+ const { activeView, markdownSource, doc, theme, editorMode, insertAtCursor, replaceAll, tiptapEditor, monacoEditor, setMarkdownSource, inlinePreviewVisible, statusBarVisible, outlineVisible, imageEditTarget, closeImageEdit, bumpMediaRevision, } = useEditorContext();
36
54
  const isPreview = activeView === 'preview';
37
55
  const isCodeMode = editorMode === 'code';
56
+ const isImageMode = editorMode === 'image';
57
+ const isMarkdownMode = editorMode === 'markdown';
38
58
  const [showFiles, setShowFiles] = useState(false);
39
59
  const [mediaRefreshKey, setMediaRefreshKey] = useState(0);
60
+ // Persistent fallback container for image-edit sidecars when the host
61
+ // didn't supply one. Lifted to shell scope so opening the same image
62
+ // multiple times sees the same `.imageEdits/<sanitized>/.versions/...`
63
+ // snapshots — otherwise each modal mount would start from an empty
64
+ // in-memory container and history would vanish on close.
65
+ const imageEditFallbackContainerRef = useRef(null);
66
+ if (imageEditFallbackContainerRef.current === null) {
67
+ imageEditFallbackContainerRef.current = new MemoryContentContainer();
68
+ }
69
+ const imageEditFallbackContainer = imageEditFallbackContainerRef.current;
40
70
  const isDark = theme === 'dark';
41
71
  const handleToggleFiles = useCallback(() => {
42
72
  setShowFiles((prev) => !prev);
@@ -163,7 +193,7 @@ function EditorShellInner({ basePath, onChange, className, height, minHeight, ma
163
193
  return () => window.removeEventListener('keydown', handler);
164
194
  }, [showPlayTab]);
165
195
  const autoGrow = minHeight !== undefined || maxHeight !== undefined;
166
- return (_jsxs("div", { className: `squisq-editor-shell ${className || ''}`, "data-theme": theme, "data-full-width": fullWidth ? 'true' : undefined, "data-thin-margins": thinMargins ? 'true' : undefined, style: {
196
+ return (_jsxs("div", { className: `squisq-editor-shell ${className || ''}`, "data-theme": theme, "data-full-width": fullWidth ? 'true' : undefined, "data-thin-margins": thinMargins ? 'true' : undefined, "data-outline-visible": isMarkdownMode && outlineVisible ? 'true' : undefined, style: {
167
197
  display: 'flex',
168
198
  flexDirection: 'column',
169
199
  overflow: 'hidden',
@@ -173,7 +203,14 @@ function EditorShellInner({ basePath, onChange, className, height, minHeight, ma
173
203
  // tabs, status bar) consume `--squisq-ux-font` as their
174
204
  // `font-family`, falling back to the system stack when unset.
175
205
  ...(uxFont ? { '--squisq-ux-font': uxFont } : {}),
176
- }, ...containerProps, children: [_jsxs(PreviewSettingsProvider, { doc: doc, children: [_jsx("div", { className: "squisq-editor-header", children: _jsx(Toolbar, { showFiles: showFiles, onToggleFiles: !isCodeMode && filesToggleEnabled ? handleToggleFiles : undefined, slotLeft: toolbarSlotLeft, slotAfterActions: _jsxs(_Fragment, { children: [toolbarSlotAfterActions, !isCodeMode && isPreview && _jsx(PreviewToolbarControls, {})] }), slotRight: toolbarSlotRight, showPlayTab: showPlayTab }) }), _jsxs("div", { className: "squisq-editor-content", style: {
206
+ // Exposed so the toolbar's view-tabs section can match the outline
207
+ // pane's width, lining up its right-edge separator with the
208
+ // outline's right edge. The variable is set unconditionally so the
209
+ // outline pane itself can also read it if needed; the
210
+ // `data-outline-visible` gate above keeps the toolbar override
211
+ // scoped to the case where alignment matters.
212
+ ...{ '--squisq-outline-width': `${outlineWidth}px` },
213
+ }, ...containerProps, children: [_jsxs(PreviewSettingsProvider, { doc: doc, themeOverride: themeOverride, children: [isImageMode ? ((toolbarSlotLeft || toolbarSlotRight) && (_jsxs("div", { className: "squisq-editor-header squisq-editor-header--image", children: [toolbarSlotLeft, _jsx("div", { style: { flex: 1 } }), toolbarSlotRight] }))) : (_jsx("div", { className: "squisq-editor-header", children: _jsx(Toolbar, { showFiles: showFiles, onToggleFiles: !isCodeMode && filesToggleEnabled ? handleToggleFiles : undefined, slotLeft: toolbarSlotLeft, slotAfterActions: _jsxs(_Fragment, { children: [toolbarSlotAfterActions, !isCodeMode && isPreview && _jsx(PreviewToolbarControls, {})] }), slotRight: toolbarSlotRight, showPlayTab: showPlayTab }) })), _jsxs("div", { className: "squisq-editor-content", style: {
177
214
  flex: autoGrow ? '1 1 auto' : 1,
178
215
  overflowY: autoGrow ? 'auto' : 'hidden',
179
216
  overflowX: 'hidden',
@@ -185,6 +222,69 @@ function EditorShellInner({ basePath, onChange, className, height, minHeight, ma
185
222
  overflow: autoGrow ? 'visible' : 'hidden',
186
223
  minHeight: 0,
187
224
  position: 'relative',
188
- }, children: [activeView === 'raw' && (_jsx(RawEditor, { theme: theme === 'dark' ? 'vs-dark' : 'vs', submitOnEnter: submitOnEnter, readOnly: readOnly })), !isCodeMode && activeView === 'wysiwyg' && (_jsx(WysiwygEditor, { submitOnEnter: submitOnEnter, placeholder: placeholder, readOnly: readOnly })), !isCodeMode && isPreview && _jsx(PreviewPanel, { basePath: basePath, container: container })] }), !isCodeMode && showFiles && (_jsx(MediaBin, { mediaProvider: mediaProvider, isDark: isDark, refreshKey: mediaRefreshKey, onMediaUploaded: insertMediaRef })), !isCodeMode && isDragging && (_jsx(DropZoneOverlay, { dragContentType: dragContentType, zoneProps: zoneProps, hasMediaProvider: mediaProvider !== null }))] }), showStatusBar && _jsx(StatusBar, {})] }), _jsx(TooltipLayer, {})] }));
225
+ }, children: [isImageMode &&
226
+ imageSrc &&
227
+ (imageMode === 'edit' && imageEditorContainer ? (_jsx(ImageEditor, { filesContainer: imageEditorContainer, initialSrc: imageSrc, allowVersioning: allowVersioning, versioningAutoSaveIdleMs: versioningAutoSaveIdleMs, onExport: onImageExport })) : (_jsx(ImageViewer, { src: imageSrc, alt: imageAlt, theme: theme }))), !isImageMode && activeView === 'raw' && (_jsxs("div", { className: "squisq-editor-with-gutter", children: [isMarkdownMode && outlineVisible && (_jsx(OutlinePanel, { width: outlineWidth }, "outline")), _jsx("div", { className: "squisq-raw-editor-container", children: _jsx(RawEditor, { theme: theme === 'dark' ? 'vs-dark' : 'vs', submitOnEnter: submitOnEnter, readOnly: readOnly }) }, "raw-editor"), isMarkdownMode && inlinePreviewVisible && (_jsx(InlinePreviewGutter, { width: inlinePreviewWidth, basePath: basePath, mediaProvider: mediaProvider }, "inline"))] }, "raw-shell")), isMarkdownMode && activeView === 'wysiwyg' && (_jsxs("div", { className: "squisq-editor-with-gutter", children: [outlineVisible && _jsx(OutlinePanel, { width: outlineWidth }, "outline"), _jsx(WysiwygEditor, { submitOnEnter: submitOnEnter, placeholder: placeholder, readOnly: readOnly }, "wysiwyg-editor"), inlinePreviewVisible && (_jsx(InlinePreviewGutter, { width: inlinePreviewWidth, basePath: basePath, mediaProvider: mediaProvider }, "inline"))] }, "wysiwyg-shell")), isMarkdownMode && isPreview && (_jsx(PreviewPanel, { basePath: basePath, workspaceContainer: workspaceContainer }))] }), isMarkdownMode && showFiles && (_jsx(MediaBin, { mediaProvider: mediaProvider, isDark: isDark, refreshKey: mediaRefreshKey, onMediaUploaded: insertMediaRef })), isMarkdownMode &&
228
+ isDragging &&
229
+ !(activeView === 'wysiwyg' && dragContentType === 'media') && (_jsx(DropZoneOverlay, { dragContentType: dragContentType, zoneProps: zoneProps, hasMediaProvider: mediaProvider !== null }))] }), statusBarVisible && !isImageMode && _jsx(StatusBar, {})] }), _jsx(TooltipLayer, {}), imageEditTarget !== null && mediaProvider && (_jsx(ImageEditModal, { relativePath: imageEditTarget, container: workspaceContainer ?? imageEditFallbackContainer, mediaProvider: mediaProvider, onClose: closeImageEdit, onSaved: () => {
230
+ bumpMediaRevision();
231
+ closeImageEdit();
232
+ }, allowVersioning: allowVersioning, versioningAutoSaveIdleMs: versioningAutoSaveIdleMs, shellTheme: theme }))] }));
233
+ }
234
+ /**
235
+ * Modal overlay that mounts a full `<ImageEditor>` against a sidecar
236
+ * container scoped under `.imageEdits/<sanitized-path>/` of the document's
237
+ * `ContentContainer`. Opens when a user clicks the "Edit" affordance on an
238
+ * image in the WYSIWYG view; on Export, rewrites the original image bytes
239
+ * via `mediaProvider.addMedia(relativePath, blob, mime)` and bumps
240
+ * `mediaRevision` so live `<img>` nodes pick up the new content.
241
+ */
242
+ function ImageEditModal({ relativePath, container, mediaProvider, onClose, onSaved, allowVersioning, versioningAutoSaveIdleMs, shellTheme, }) {
243
+ // Each unique image path gets its own sidecar so multiple images in the
244
+ // same doc can be edited independently without colliding state. When the
245
+ // host didn't supply a `container`, fall back to a fresh in-memory one
246
+ // — the edit session is transient anyway and the final raster is what
247
+ // gets written back through `mediaProvider`.
248
+ const sidecar = useMemo(() => {
249
+ const sanitized = relativePath.replace(/[^a-zA-Z0-9._-]+/g, '_');
250
+ const parent = container ?? new MemoryContentContainer();
251
+ return scopeContainer(parent, `.imageEdits/${sanitized}`);
252
+ }, [container, relativePath]);
253
+ const [initialSrc, setInitialSrc] = useState(null);
254
+ const [resolveError, setResolveError] = useState(null);
255
+ useEffect(() => {
256
+ let cancelled = false;
257
+ mediaProvider.resolveUrl(relativePath).then((url) => {
258
+ if (!cancelled)
259
+ setInitialSrc(url);
260
+ }, (err) => {
261
+ if (!cancelled) {
262
+ setResolveError(err instanceof Error ? err.message : String(err));
263
+ }
264
+ });
265
+ return () => {
266
+ cancelled = true;
267
+ };
268
+ }, [mediaProvider, relativePath]);
269
+ const handleExport = useCallback((blob, format) => {
270
+ const mime = `image/${format}`;
271
+ mediaProvider.addMedia(relativePath, blob, mime).then(() => onSaved(), (err) => {
272
+ console.error('Failed to write image back:', err instanceof Error ? err.message : err);
273
+ });
274
+ }, [mediaProvider, relativePath, onSaved]);
275
+ // Close on Escape — global listener so it works regardless of focus.
276
+ useEffect(() => {
277
+ const handler = (e) => {
278
+ if (e.key === 'Escape')
279
+ onClose();
280
+ };
281
+ window.addEventListener('keydown', handler);
282
+ return () => window.removeEventListener('keydown', handler);
283
+ }, [onClose]);
284
+ return (_jsx("div", { className: "squisq-image-edit-modal", "data-testid": "image-edit-modal", role: "dialog", "aria-modal": "true", "aria-label": `Edit ${relativePath}`, onClick: (e) => {
285
+ // Click on the dim backdrop (but not on the surface) → close.
286
+ if (e.target === e.currentTarget)
287
+ onClose();
288
+ }, children: _jsxs("div", { className: "squisq-image-edit-modal__surface", children: [_jsxs("header", { className: "squisq-image-edit-modal__header", children: [_jsx("span", { className: "squisq-image-edit-modal__title", children: "Edit image" }), _jsx("span", { className: "squisq-image-edit-modal__path", children: relativePath }), _jsx("button", { type: "button", className: "squisq-image-edit-modal__close", "data-testid": "image-edit-modal-close", onClick: onClose, "aria-label": "Close image editor", children: "\u00D7" })] }), _jsx("div", { className: "squisq-image-edit-modal__body", children: resolveError ? (_jsxs("div", { className: "squisq-image-edit-modal__error", children: ["Failed to load image: ", resolveError] })) : !initialSrc ? (_jsx("div", { className: "squisq-image-edit-modal__loading", children: "Loading image\u2026" })) : (_jsx(ImageEditor, { filesContainer: sidecar, initialSrc: initialSrc, allowVersioning: allowVersioning, versioningAutoSaveIdleMs: versioningAutoSaveIdleMs, onExport: handleExport, saveBehavior: "export", saveFormat: "png", saveLabel: "Save and close", saveTitle: "Save changes back to the image and close", surface: shellTheme === 'dark' ? DARK_SURFACE : LIGHT_SURFACE })) })] }) }));
189
289
  }
190
290
  //# sourceMappingURL=EditorShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorShell.js","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EACL,cAAc,EACd,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAqJ3B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,eAAe,GAAG,EAAE,EACpB,WAAW,GAAG,SAAS,EACvB,SAAS,GAAG,UAAU,EACtB,QAAQ,GAAG,GAAG,EACd,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,SAAS,EACT,MAAM,GAAG,OAAO,EAChB,SAAS,EACT,SAAS,EACT,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,GAAG,IAAI,EAClB,aAAa,EACb,SAAS,GAAG,KAAK,EACjB,MAAM,EACN,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,IAAI,EACpB,gBAAgB,GAAG,QAAQ,EAC3B,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,WAAW,EACX,QAAQ,GAAG,KAAK,GACC;IACjB,yFAAyF;IACzF,MAAM,kBAAkB,GAAG,eAAe,IAAI,aAAa,KAAK,SAAS,CAAC;IAE1E,uEAAuE;IACvE,yEAAyE;IACzE,MAAM,oBAAoB,GACxB,CAAC,WAAW,IAAI,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtE,OAAO,CACL,KAAC,cAAc,IACb,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,YAElB,KAAC,gBAAgB,IACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,IAAI,IAAI,EACpC,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,GAClB,GACa,CAClB,CAAC;AACJ,CAAC;AAyBD,SAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,SAAS,EACT,MAAM,EACN,WAAW,EACX,aAAa,EACb,QAAQ,GACc;IACtB,MAAM,EACJ,UAAU,EACV,cAAc,EACd,GAAG,EACH,KAAK,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,GAAG,gBAAgB,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,KAAK,MAAM,CAAC;IACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC;IAEhC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oCAAoC;IAEpC;;;;;;;;;;;;;;;OAeG;IACH,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,YAAoB,EAAE,IAAY,EAAE,QAAgB,EAAE,EAAE;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,YAAY,GAAG,CAAC;QAErF,IAAI,UAAU,KAAK,SAAS,IAAI,YAAY,EAAE,CAAC;YAC7C,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,YAAY;qBACT,KAAK,EAAE;qBACP,KAAK,EAAE;qBACP,aAAa,CAAC;oBACb;wBACE,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC;wBACxD,IAAI,EAAE,GAAG;qBACV;iBACF,CAAC;qBACD,GAAG,EAAE,CAAC;YACX,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,UAAU,KAAK,KAAK,IAAI,YAAY,EAAE,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,8DAA8D;QAC9D,wDAAwD;QACxD,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC,EACD,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAC5F,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,KAAK,EAAE,KAAa,EAAE,MAAkB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAE9C,sBAAsB;YACtB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAC5D,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,yDAAyD;gBACzD,IAAI,CAAC,SAAS;oBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnC,+DAA+D;gBAC/D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,6DAA6D;gBAC7D,2BAA2B;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;wBAAE,SAAS;oBAC7B,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAED,qBAAqB;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,UAAU,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,qCAAqC;oBACrC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAC7C,cAAc,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC,CACvE,CAAC;IAEF,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAC7E,MAAM,EAAE,cAAc;KACvB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,EAAE,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/B,wCAAwC;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3B,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;oBACd,KAAK,GAAG;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC5E,MAAM;oBACR,KAAK,GAAG;wBACN,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC;wBACxE,MAAM;oBACR,KAAK,GAAG;wBACN,IAAI,CAAC,WAAW;4BAAE,OAAO;wBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,aAAa,CAAoB,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC;wBAC5E,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,CAAC;IAEpE,OAAO,CACL,eACE,SAAS,EAAE,uBAAuB,SAAS,IAAI,EAAE,EAAE,gBACvC,KAAK,qBACA,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,uBAC5B,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACnD,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,QAAQ;YAClB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YACrD,6DAA6D;YAC7D,iEAAiE;YACjE,wDAAwD;YACxD,8DAA8D;YAC9D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,kBAAkB,EAAE,MAAM,EAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,KACG,cAAc,aAElB,MAAC,uBAAuB,IAAC,GAAG,EAAE,GAAG,aAE/B,cAAK,SAAS,EAAC,sBAAsB,YACnC,KAAC,OAAO,IACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,CAAC,UAAU,IAAI,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EAChF,QAAQ,EAAE,eAAe,EACzB,gBAAgB,EACd,8BACG,uBAAuB,EACvB,CAAC,UAAU,IAAI,SAAS,IAAI,KAAC,sBAAsB,KAAG,IACtD,EAEL,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,WAAW,GACxB,GACE,EAGN,eACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC/B,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;4BACvC,SAAS,EAAE,QAAQ;4BACnB,SAAS,EAAE,CAAC;4BACZ,QAAQ,EAAE,UAAU;4BACpB,OAAO,EAAE,MAAM;yBAChB,aAED,eACE,KAAK,EAAE;oCACL,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oCAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;oCACzC,SAAS,EAAE,CAAC;oCACZ,QAAQ,EAAE,UAAU;iCACrB,aAEA,UAAU,KAAK,KAAK,IAAI,CACvB,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAC1C,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,GAClB,CACH,EAIA,CAAC,UAAU,IAAI,UAAU,KAAK,SAAS,IAAI,CAC1C,KAAC,aAAa,IACZ,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,GAClB,CACH,EACA,CAAC,UAAU,IAAI,SAAS,IAAI,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAI,IACnF,EAEL,CAAC,UAAU,IAAI,SAAS,IAAI,CAC3B,KAAC,QAAQ,IACP,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,cAAc,GAC/B,CACH,EAGA,CAAC,UAAU,IAAI,UAAU,IAAI,CAC5B,KAAC,eAAe,IACd,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,aAAa,KAAK,IAAI,GACxC,CACH,IACG,EAKL,aAAa,IAAI,KAAC,SAAS,KAAG,IACP,EAC1B,KAAC,YAAY,KAAG,IACZ,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"EditorShell.js","sourceRoot":"","sources":["../src/EditorShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * EmojiPicker
3
+ *
4
+ * Toolbar-anchored popover for inserting emoji. The user picks a
5
+ * category from a row of tabs along the top, sees a scrollable grid
6
+ * for that category, and can type into a search box to narrow across
7
+ * all categories at once. Click → `onSelect(char)` → caller is
8
+ * responsible for routing the character into the active editor.
9
+ *
10
+ * Keeps the data flat and the rendering simple: there's no fuzzy
11
+ * search, no recently-used persistence, no skin-tone modifiers — just
12
+ * a fast, predictable picker. We can layer those on later without
13
+ * changing the public surface.
14
+ */
15
+ import type { CSSProperties } from 'react';
16
+ import type { PickerEntry } from './emojiData';
17
+ export interface EmojiPickerProps {
18
+ /** Whether the picker is visible. */
19
+ open: boolean;
20
+ /**
21
+ * Fired when the user picks an entry. Carries either an emoji glyph
22
+ * or a FontAwesome icon descriptor — the caller dispatches on
23
+ * `kind` to insert it into the active editor. The caller is also
24
+ * responsible for closing the popover.
25
+ */
26
+ onSelect: (entry: PickerEntry) => void;
27
+ /** Fired on Escape, click-outside, or selection so the caller can close. */
28
+ onClose: () => void;
29
+ /** Optional anchor element — used for click-outside detection. When the
30
+ * popover is rendered inside the same container as the trigger, pointer
31
+ * events on the trigger don't fire the outside handler. */
32
+ anchorRef?: React.RefObject<HTMLElement>;
33
+ /** Optional CSS class for the popover root. */
34
+ className?: string;
35
+ /** Optional inline style for the popover root (e.g. positioning). */
36
+ style?: CSSProperties;
37
+ /**
38
+ * Editor theme — `'light'` or `'dark'`. Drives the picker's color
39
+ * palette. Required for the picker to render correctly when portaled
40
+ * outside the editor shell, since CSS custom properties defined on
41
+ * the shell don't cascade to portal targets. Defaults to `'light'`.
42
+ */
43
+ theme?: 'light' | 'dark';
44
+ }
45
+ /** Default popover dimensions. The Toolbar reads these to position the
46
+ * popover with viewport-aware clamping so it never gets clipped. */
47
+ export declare const EMOJI_PICKER_WIDTH = 480;
48
+ export declare const EMOJI_PICKER_MAX_HEIGHT = 560;
49
+ export declare function EmojiPicker({ open, onSelect, onClose, anchorRef, className, style, theme, }: EmojiPickerProps): import("react/jsx-runtime").JSX.Element | null;
50
+ //# sourceMappingURL=EmojiPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmojiPicker.d.ts","sourceRoot":"","sources":["../src/EmojiPicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;gEAE4D;IAC5D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAgCD;qEACqE;AACrE,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAwB3C,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAe,GAChB,EAAE,gBAAgB,kDAyNlB"}
@@ -0,0 +1,182 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * EmojiPicker
4
+ *
5
+ * Toolbar-anchored popover for inserting emoji. The user picks a
6
+ * category from a row of tabs along the top, sees a scrollable grid
7
+ * for that category, and can type into a search box to narrow across
8
+ * all categories at once. Click → `onSelect(char)` → caller is
9
+ * responsible for routing the character into the active editor.
10
+ *
11
+ * Keeps the data flat and the rendering simple: there's no fuzzy
12
+ * search, no recently-used persistence, no skin-tone modifiers — just
13
+ * a fast, predictable picker. We can layer those on later without
14
+ * changing the public surface.
15
+ */
16
+ import { useEffect, useMemo, useRef, useState } from 'react';
17
+ import { PICKER_CATEGORIES, searchPickerEntries } from './emojiData';
18
+ const LIGHT_PALETTE = {
19
+ bg: '#fff',
20
+ border: '#d4cdb5',
21
+ inputBg: '#fff',
22
+ text: '#1f2937',
23
+ textMuted: '#8a7a5a',
24
+ accent: '#8B6914',
25
+ accentSoft: '#f3eedb',
26
+ };
27
+ const DARK_PALETTE = {
28
+ bg: '#1f2937',
29
+ border: '#4b5563',
30
+ inputBg: '#374151',
31
+ text: '#e5e7eb',
32
+ textMuted: '#9ca3af',
33
+ accent: '#fbbf24',
34
+ accentSoft: '#374151',
35
+ };
36
+ /** Default popover dimensions. The Toolbar reads these to position the
37
+ * popover with viewport-aware clamping so it never gets clipped. */
38
+ export const EMOJI_PICKER_WIDTH = 480;
39
+ export const EMOJI_PICKER_MAX_HEIGHT = 560;
40
+ function buildPopoverStyle(palette) {
41
+ return {
42
+ position: 'absolute',
43
+ zIndex: 100,
44
+ background: palette.bg,
45
+ border: `1px solid ${palette.border}`,
46
+ borderRadius: 6,
47
+ // Dark mode needs a deeper shadow than the light palette uses,
48
+ // because the popover sits on a dark surface where a soft 15%
49
+ // shadow effectively disappears.
50
+ boxShadow: palette === DARK_PALETTE ? '0 8px 32px rgba(0, 0, 0, 0.5)' : '0 6px 24px rgba(0, 0, 0, 0.15)',
51
+ color: palette.text,
52
+ width: EMOJI_PICKER_WIDTH,
53
+ maxWidth: '95vw',
54
+ maxHeight: EMOJI_PICKER_MAX_HEIGHT,
55
+ display: 'flex',
56
+ flexDirection: 'column',
57
+ overflow: 'hidden',
58
+ };
59
+ }
60
+ export function EmojiPicker({ open, onSelect, onClose, anchorRef, className, style, theme = 'light', }) {
61
+ const palette = theme === 'dark' ? DARK_PALETTE : LIGHT_PALETTE;
62
+ const [activeCategory, setActiveCategory] = useState(PICKER_CATEGORIES[0].id);
63
+ const [query, setQuery] = useState('');
64
+ const popoverRef = useRef(null);
65
+ const searchInputRef = useRef(null);
66
+ // Focus the search box when the popover opens; reset query when it
67
+ // closes so the next open starts fresh.
68
+ useEffect(() => {
69
+ if (open) {
70
+ // Defer so the input is mounted.
71
+ const t = setTimeout(() => searchInputRef.current?.focus(), 0);
72
+ return () => clearTimeout(t);
73
+ }
74
+ setQuery('');
75
+ setActiveCategory(PICKER_CATEGORIES[0].id);
76
+ return undefined;
77
+ }, [open]);
78
+ // Close on outside click and Escape.
79
+ useEffect(() => {
80
+ if (!open)
81
+ return;
82
+ const onPointerDown = (e) => {
83
+ const target = e.target;
84
+ if (!target)
85
+ return;
86
+ if (popoverRef.current?.contains(target))
87
+ return;
88
+ if (anchorRef?.current?.contains(target))
89
+ return;
90
+ onClose();
91
+ };
92
+ const onKey = (e) => {
93
+ if (e.key === 'Escape')
94
+ onClose();
95
+ };
96
+ document.addEventListener('mousedown', onPointerDown);
97
+ document.addEventListener('keydown', onKey);
98
+ return () => {
99
+ document.removeEventListener('mousedown', onPointerDown);
100
+ document.removeEventListener('keydown', onKey);
101
+ };
102
+ }, [open, onClose, anchorRef]);
103
+ const visibleEntries = useMemo(() => {
104
+ if (query.trim())
105
+ return searchPickerEntries(query);
106
+ const cat = PICKER_CATEGORIES.find((c) => c.id === activeCategory);
107
+ return cat ? cat.entries : [];
108
+ }, [query, activeCategory]);
109
+ if (!open)
110
+ return null;
111
+ return (_jsxs("div", { ref: popoverRef, className: `squisq-emoji-picker ${className ?? ''}`, "data-theme": theme, style: { ...buildPopoverStyle(palette), ...style }, role: "dialog", "aria-label": "Insert emoji", "data-testid": "emoji-picker", children: [_jsx("div", { style: {
112
+ padding: '8px 10px',
113
+ borderBottom: `1px solid ${palette.border}`,
114
+ }, children: _jsx("input", { ref: searchInputRef, type: "text", value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search emoji & icons\u2026", "aria-label": "Search emoji & icons", style: {
115
+ width: '100%',
116
+ padding: '6px 8px',
117
+ fontSize: 13,
118
+ fontFamily: 'inherit',
119
+ border: `1px solid ${palette.border}`,
120
+ borderRadius: 4,
121
+ background: palette.inputBg,
122
+ color: palette.text,
123
+ boxSizing: 'border-box',
124
+ } }) }), !query.trim() && (_jsx("div", { role: "tablist", "aria-label": "Emoji & icon categories", style: {
125
+ display: 'grid',
126
+ gridTemplateColumns: 'repeat(6, 1fr)',
127
+ gap: 2,
128
+ padding: '4px 6px',
129
+ borderBottom: `1px solid ${palette.border}`,
130
+ }, children: PICKER_CATEGORIES.map((cat) => {
131
+ const active = cat.id === activeCategory;
132
+ return (_jsx("button", { type: "button", role: "tab", "aria-selected": active, "aria-label": cat.label, title: cat.label, onClick: () => setActiveCategory(cat.id), style: {
133
+ fontSize: 18,
134
+ lineHeight: 1,
135
+ padding: '6px 0',
136
+ cursor: 'pointer',
137
+ background: active ? palette.accentSoft : 'transparent',
138
+ border: '1px solid transparent',
139
+ borderBottom: active ? `2px solid ${palette.accent}` : '2px solid transparent',
140
+ borderRadius: 4,
141
+ color: palette.text,
142
+ display: 'flex',
143
+ alignItems: 'center',
144
+ justifyContent: 'center',
145
+ }, children: cat.tab.kind === 'emoji' ? (cat.tab.char) : (_jsx("i", { className: `fa-${cat.tab.family} fa-${cat.tab.name}`, "aria-hidden": "true" })) }, cat.id));
146
+ }) })), _jsx("div", { style: {
147
+ padding: 6,
148
+ flex: 1,
149
+ minHeight: 0,
150
+ overflowY: 'auto',
151
+ display: 'grid',
152
+ gridTemplateColumns: 'repeat(10, 1fr)',
153
+ gap: 2,
154
+ }, children: visibleEntries.length === 0 ? (_jsx("div", { style: {
155
+ gridColumn: '1 / -1',
156
+ padding: '20px 8px',
157
+ textAlign: 'center',
158
+ color: palette.textMuted,
159
+ fontSize: 13,
160
+ }, children: query.trim() ? `No matches for "${query.trim()}"` : 'No entries' })) : (visibleEntries.map((entry, idx) => {
161
+ const tooltip = entry.kind === 'emoji' ? entry.name : entry.label;
162
+ const key = entry.kind === 'emoji' ? `e-${entry.char}-${idx}` : `i-${entry.token}-${idx}`;
163
+ return (_jsx("button", { type: "button", title: tooltip, "aria-label": tooltip, "data-picker-kind": entry.kind, onClick: () => onSelect(entry), style: {
164
+ fontSize: 22,
165
+ lineHeight: 1,
166
+ padding: 4,
167
+ background: 'transparent',
168
+ border: '1px solid transparent',
169
+ borderRadius: 4,
170
+ cursor: 'pointer',
171
+ color: palette.text,
172
+ display: 'flex',
173
+ alignItems: 'center',
174
+ justifyContent: 'center',
175
+ }, onMouseEnter: (e) => {
176
+ e.currentTarget.style.background = palette.accentSoft;
177
+ }, onMouseLeave: (e) => {
178
+ e.currentTarget.style.background = 'transparent';
179
+ }, children: entry.kind === 'emoji' ? (entry.char) : (_jsx("i", { className: `fa-${entry.family} fa-${entry.name}`, "aria-hidden": "true" })) }, key));
180
+ })) })] }));
181
+ }
182
+ //# sourceMappingURL=EmojiPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmojiPicker.js","sourceRoot":"","sources":["../src/EmojiPicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * ImageEditor — top-level shell that wires together the toolbar,
3
+ * canvas surface, layers panel, and properties panel against an
4
+ * `ImageEditDoc` persisted in a sidecar `ContentContainer`.
5
+ *
6
+ * Hosts pass an already-scoped container (typically built with
7
+ * `scopeContainer(parent, basename + '_files')`). On first mount, if
8
+ * the sidecar has no `state.json`, the editor seeds it from
9
+ * `initialSrc` — the source bytes are copied to `assets/source.<ext>`
10
+ * so the doc is portable and round-trips through ZIP serialization.
11
+ *
12
+ * The export pipeline is `state.json` → SVG → raster blob via
13
+ * `exportImageEditDoc` from `@bendyline/squisq/imageEdit`.
14
+ */
15
+ import type { ContentContainer } from '@bendyline/squisq/storage';
16
+ import { type ImageEditExportFormat } from '@bendyline/squisq/imageEdit';
17
+ import type { SurfaceScheme, Theme } from '@bendyline/squisq/schemas';
18
+ export interface ImageEditorProps {
19
+ /**
20
+ * Scoped sidecar container for this image — typically
21
+ * `scopeContainer(parent, basename + '_files')`.
22
+ */
23
+ filesContainer: ContentContainer;
24
+ /**
25
+ * Source URL used to seed `assets/source.<ext>` and layer 0 the
26
+ * first time the sidecar is opened. Ignored once `state.json` exists.
27
+ */
28
+ initialSrc?: string;
29
+ /** Override the state filename. Default: `state.json`. */
30
+ stateFilename?: string;
31
+ /** Enable version-history snapshots in `.versions/`. Default: `false`. */
32
+ allowVersioning?: boolean;
33
+ /** Auto-save idle delay (ms) for version snapshots. Default: `5000`. */
34
+ versioningAutoSaveIdleMs?: number;
35
+ /** Called after the user clicks Export and the blob is produced. */
36
+ onExport?: (blob: Blob, format: ImageEditExportFormat) => void;
37
+ /**
38
+ * What the toolbar's Save button does:
39
+ * - `'flush'` (default): write `state.json` to the sidecar.
40
+ * - `'export'`: rasterize the canvas in `saveFormat` and fire
41
+ * {@link onExport} — the same code path the Export menu uses.
42
+ * Hosts that want one-click "save and close" semantics use this.
43
+ */
44
+ saveBehavior?: 'flush' | 'export';
45
+ /** Format used when `saveBehavior === 'export'`. Default: `'png'`. */
46
+ saveFormat?: ImageEditExportFormat;
47
+ /** Override the Save button label. Default: `'Save'`. */
48
+ saveLabel?: string;
49
+ /** Override the Save button tooltip. */
50
+ saveTitle?: string;
51
+ /**
52
+ * Squisq Theme to color the editor chrome (toolbar, panels, controls).
53
+ * Defaults to `DEFAULT_THEME`. Combined with {@link surface} the same
54
+ * way `<JsonView>` and `<LinearDocView>` do.
55
+ */
56
+ theme?: Theme;
57
+ /**
58
+ * Surface scheme — `LIGHT_SURFACE`, `DARK_SURFACE`, an explicit
59
+ * `SurfaceScheme` object, or `'auto'` to track the user's OS
60
+ * `prefers-color-scheme`. When omitted, the theme's own background is
61
+ * used as-is.
62
+ */
63
+ surface?: SurfaceScheme | 'auto';
64
+ /** Optional className for the root element. */
65
+ className?: string;
66
+ }
67
+ export declare function ImageEditor(props: ImageEditorProps): import("react/jsx-runtime").JSX.Element;
68
+ //# sourceMappingURL=ImageEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditor.d.ts","sourceRoot":"","sources":["../src/ImageEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAStE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,cAAc,EAAE,gBAAgB,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,wEAAwE;IACxE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC/D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,sEAAsE;IACtE,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAyPlD"}