@rebasepro/admin 0.2.3 → 0.2.4

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 (210) hide show
  1. package/dist/{CollectionEditorDialog-CmGXXSY9.js → CollectionEditorDialog-D0VqpLPO.js} +70 -77
  2. package/dist/CollectionEditorDialog-D0VqpLPO.js.map +1 -0
  3. package/dist/{CollectionsStudioView-DcLHT5bU.js → CollectionsStudioView-Bc3Rxxc2.js} +5 -4
  4. package/dist/{CollectionsStudioView-DcLHT5bU.js.map → CollectionsStudioView-Bc3Rxxc2.js.map} +1 -1
  5. package/dist/{ExportCollectionAction-BfN34eWX.js → ExportCollectionAction-Ckc-09BQ.js} +4 -3
  6. package/dist/ExportCollectionAction-Ckc-09BQ.js.map +1 -0
  7. package/dist/{ImportCollectionAction-SZrInjhx.js → ImportCollectionAction-BqjIrC3Z.js} +3 -2
  8. package/dist/{ImportCollectionAction-SZrInjhx.js.map → ImportCollectionAction-BqjIrC3Z.js.map} +1 -1
  9. package/dist/{PropertyEditView-Cvryrb3B.js → PropertyEditView-CvRSV-A2.js} +128 -121
  10. package/dist/PropertyEditView-CvRSV-A2.js.map +1 -0
  11. package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -5
  12. package/dist/collection_editor/index.d.ts +0 -1
  13. package/dist/collection_editor/types/collection_editor_controller.d.ts +0 -2
  14. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +3 -3
  15. package/dist/collection_editor_ui.js +3 -3
  16. package/dist/components/ArrayContainer.d.ts +2 -2
  17. package/dist/components/DefaultAppBar.d.ts +18 -1
  18. package/dist/components/DefaultDrawer.d.ts +51 -3
  19. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  21. package/dist/components/EntityCollectionTable/table_bindings.d.ts +4 -3
  22. package/dist/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +4 -3
  23. package/dist/components/EntityEditView.d.ts +2 -1
  24. package/dist/components/HomePage/HomePageDnD.d.ts +3 -3
  25. package/dist/components/PropertyCollectionView.d.ts +1 -1
  26. package/dist/components/PropertyIdCopyTooltip.d.ts +1 -1
  27. package/dist/components/SelectableTable/SelectionStore.d.ts +4 -1
  28. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -2
  29. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -2
  30. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -2
  31. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -2
  32. package/dist/components/admin/RolesView.d.ts +3 -3
  33. package/dist/components/admin/UsersView.d.ts +3 -3
  34. package/dist/components/app/Drawer.d.ts +8 -1
  35. package/dist/data_export/export/export.d.ts +3 -3
  36. package/dist/editor/components/editor-bubble.d.ts +5 -1
  37. package/dist/editor/components/image-bubble.d.ts +5 -1
  38. package/dist/editor/components/index.d.ts +3 -3
  39. package/dist/editor/components/table-bubble.d.ts +5 -1
  40. package/dist/editor/nodeViews/ReactNodeView.d.ts +4 -1
  41. package/dist/editor/useProseMirror.d.ts +2 -2
  42. package/dist/editor/utils/remove_classes.d.ts +1 -1
  43. package/dist/editor.js +15 -14
  44. package/dist/editor.js.map +1 -1
  45. package/dist/form/EntityForm.d.ts +2 -2
  46. package/dist/form/components/StorageUploadProgress.d.ts +2 -2
  47. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +1 -1
  48. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
  49. package/dist/form/validation.d.ts +3 -3
  50. package/dist/hooks/navigation/useResolvedCollections.d.ts +6 -0
  51. package/dist/hooks/navigation/useResolvedViews.d.ts +3 -4
  52. package/dist/{index-PLIQXpTt.js → index-BCcLwgfe.js} +3 -2
  53. package/dist/{index-PLIQXpTt.js.map → index-BCcLwgfe.js.map} +1 -1
  54. package/dist/{index-DjduZG1T.js → index-DY2k5TtG.js} +3 -3
  55. package/dist/index-DY2k5TtG.js.map +1 -0
  56. package/dist/{index-MKPc70-v.js → index-UQOMHwt1.js} +3 -3
  57. package/dist/index-UQOMHwt1.js.map +1 -0
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.js +2813 -372
  60. package/dist/index.js.map +1 -1
  61. package/dist/{markdown-z2Ir7Cgo.js → markdown-DD2JDU1X.js} +2 -2
  62. package/dist/markdown-DD2JDU1X.js.map +1 -0
  63. package/dist/preview/components/UrlComponentPreview.d.ts +1 -0
  64. package/dist/types/components/EntityFormActionsProps.d.ts +1 -1
  65. package/dist/types/components/EntityFormProps.d.ts +2 -2
  66. package/dist/types/fields.d.ts +1 -1
  67. package/dist/{util-DbWax_sV.js → util-ZM9gQuCv.js} +2031 -2078
  68. package/dist/util-ZM9gQuCv.js.map +1 -0
  69. package/package.json +8 -8
  70. package/src/collection_editor/ConfigControllerProvider.tsx +3 -13
  71. package/src/collection_editor/index.ts +1 -3
  72. package/src/collection_editor/types/collection_editor_controller.tsx +0 -3
  73. package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -6
  74. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -6
  75. package/src/collection_editor/ui/EditorEntityAction.tsx +1 -6
  76. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +7 -14
  77. package/src/collection_editor/ui/NewCollectionCard.tsx +1 -5
  78. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -8
  79. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +8 -12
  80. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +21 -21
  81. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +4 -4
  82. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +1 -1
  83. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +3 -3
  84. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
  85. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +8 -8
  86. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +5 -5
  87. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  88. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +5 -5
  89. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +5 -5
  90. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
  91. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +2 -2
  92. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +8 -8
  93. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +5 -5
  94. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +3 -2
  95. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
  97. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +1 -1
  98. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +4 -7
  99. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +4 -4
  100. package/src/components/ArrayContainer.tsx +3 -3
  101. package/src/components/DefaultAppBar.tsx +52 -31
  102. package/src/components/DefaultDrawer.tsx +279 -66
  103. package/src/components/DrawerNavigationItem.tsx +1 -1
  104. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +6 -5
  105. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +9 -7
  106. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +5 -5
  107. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +12 -9
  108. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +2 -2
  109. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -1
  110. package/src/components/EntityCollectionTable/table_bindings.tsx +5 -4
  111. package/src/components/EntityCollectionView/EntityCollectionView.tsx +6 -4
  112. package/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.ts +1 -1
  113. package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +7 -6
  114. package/src/components/EntityDetailView.tsx +46 -24
  115. package/src/components/EntityEditView.tsx +51 -28
  116. package/src/components/EntityEditViewFormActions.tsx +4 -4
  117. package/src/components/EntityPreview.tsx +9 -4
  118. package/src/components/HomePage/HomePageDnD.tsx +3 -2
  119. package/src/components/PropertyCollectionView.tsx +1 -1
  120. package/src/components/PropertyIdCopyTooltip.tsx +1 -1
  121. package/src/components/RebaseLayout.tsx +5 -1
  122. package/src/components/RebaseNavigation.tsx +2 -2
  123. package/src/components/RebaseRouteDefs.tsx +4 -7
  124. package/src/components/RebaseShell.tsx +16 -13
  125. package/src/components/SearchIconsView.tsx +1 -8
  126. package/src/components/SelectableTable/SelectableTable.tsx +8 -11
  127. package/src/components/SelectableTable/SelectionStore.ts +1 -1
  128. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +3 -3
  129. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +3 -3
  130. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +5 -5
  131. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +3 -3
  132. package/src/components/SideEntityProvider.tsx +2 -1
  133. package/src/components/admin/RolesView.tsx +7 -2
  134. package/src/components/admin/UsersView.tsx +12 -6
  135. package/src/components/app/Drawer.tsx +9 -1
  136. package/src/components/app/Scaffold.tsx +5 -1
  137. package/src/data_export/export/export.ts +17 -17
  138. package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
  139. package/src/editor/components/editor-bubble.tsx +32 -9
  140. package/src/editor/components/image-bubble.tsx +27 -11
  141. package/src/editor/components/index.ts +3 -3
  142. package/src/editor/components/table-bubble.tsx +79 -17
  143. package/src/editor/extensions/HighlightDecorationExtension.ts +3 -2
  144. package/src/editor/nodeViews/ReactNodeView.tsx +1 -1
  145. package/src/editor/nodeViews/TaskItemComponent.tsx +9 -8
  146. package/src/editor/schema.ts +135 -59
  147. package/src/editor/selectors/link-selector.tsx +8 -5
  148. package/src/editor/useProseMirror.ts +2 -2
  149. package/src/editor/utils/remove_classes.ts +6 -5
  150. package/src/form/EntityForm.tsx +15 -15
  151. package/src/form/EntityFormActions.tsx +2 -2
  152. package/src/form/PropertyFieldBinding.tsx +64 -64
  153. package/src/form/components/FieldHelperText.tsx +4 -4
  154. package/src/form/components/StorageUploadProgress.tsx +2 -2
  155. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +1 -1
  156. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +1 -1
  157. package/src/form/field_bindings/BlockFieldBinding.tsx +54 -53
  158. package/src/form/field_bindings/KeyValueFieldBinding.tsx +290 -289
  159. package/src/form/field_bindings/MapFieldBinding.tsx +2 -2
  160. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -2
  161. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +1 -1
  162. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +1 -1
  163. package/src/form/field_bindings/ReferenceFieldBinding.tsx +8 -6
  164. package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
  165. package/src/form/field_bindings/RepeatFieldBinding.tsx +1 -1
  166. package/src/form/field_bindings/SelectFieldBinding.tsx +1 -1
  167. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +84 -84
  168. package/src/form/field_bindings/SwitchFieldBinding.tsx +16 -16
  169. package/src/form/field_bindings/TextFieldBinding.tsx +77 -73
  170. package/src/form/field_bindings/UserSelectFieldBinding.tsx +17 -17
  171. package/src/form/validation.ts +43 -43
  172. package/src/hooks/navigation/useBuildNavigationStateController.tsx +3 -5
  173. package/src/hooks/navigation/useResolvedCollections.ts +27 -7
  174. package/src/hooks/navigation/useResolvedViews.tsx +24 -44
  175. package/src/index.ts +2 -0
  176. package/src/preview/PropertyPreview.tsx +2 -2
  177. package/src/preview/components/ImagePreview.tsx +2 -1
  178. package/src/preview/components/UrlComponentPreview.tsx +11 -2
  179. package/src/preview/components/UserPreview.tsx +1 -1
  180. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -2
  181. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -4
  182. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +3 -3
  183. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +3 -3
  184. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +3 -2
  185. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -8
  186. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +1 -1
  187. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -3
  188. package/src/preview/property_previews/MapPropertyPreview.tsx +4 -3
  189. package/src/preview/property_previews/NumberPropertyPreview.tsx +5 -3
  190. package/src/preview/property_previews/StringPropertyPreview.tsx +10 -8
  191. package/src/types/components/EntityFormActionsProps.tsx +1 -1
  192. package/src/types/components/EntityFormProps.tsx +2 -2
  193. package/src/types/fields.tsx +2 -2
  194. package/dist/CollectionEditorDialog-CmGXXSY9.js.map +0 -1
  195. package/dist/ContentHomePage-C7vFqKSe.js +0 -1784
  196. package/dist/ContentHomePage-C7vFqKSe.js.map +0 -1
  197. package/dist/ExportCollectionAction-BfN34eWX.js.map +0 -1
  198. package/dist/PropertyEditView-Cvryrb3B.js.map +0 -1
  199. package/dist/RoleChip-QtUFXeTp.js +0 -67
  200. package/dist/RoleChip-QtUFXeTp.js.map +0 -1
  201. package/dist/RolesView-BCb7qwWs.js +0 -437
  202. package/dist/RolesView-BCb7qwWs.js.map +0 -1
  203. package/dist/UsersView-Cex24r8H.js +0 -408
  204. package/dist/UsersView-Cex24r8H.js.map +0 -1
  205. package/dist/collection_editor/types/config_permissions.d.ts +0 -19
  206. package/dist/index-DjduZG1T.js.map +0 -1
  207. package/dist/index-MKPc70-v.js.map +0 -1
  208. package/dist/markdown-z2Ir7Cgo.js.map +0 -1
  209. package/dist/util-DbWax_sV.js.map +0 -1
  210. package/src/collection_editor/types/config_permissions.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sources":["../src/editor/hooks/useProseMirrorContext.ts","../src/editor/components/editor-bubble.tsx","../src/editor/components/editor-bubble-item.tsx","../src/editor/plugins/slashCommandPlugin.ts","../src/editor/extensions/Image.ts","../src/editor/extensions/TextLoadingDecorationExtension.tsx","../src/editor/components/SlashCommandMenu.tsx","../src/editor/components/image-bubble.tsx","../src/editor/components/table-bubble.tsx","../src/editor/utils/prosemirror-utils.ts","../src/editor/selectors/node-selector.tsx","../src/editor/selectors/link-selector.tsx","../src/editor/selectors/text-buttons.tsx","../src/editor/utils/remove_classes.ts","../src/editor/extensions/clipboard.ts","../src/editor/extensions/drag-and-drop.tsx","../src/editor/extensions/HighlightDecorationExtension.ts","../src/editor/plugins/inputrules.ts","../src/editor/plugins/placeholderPlugin.ts","../src/editor/plugins/index.ts","../src/editor/nodeViews/ReactNodeView.tsx","../src/editor/nodeViews/TaskItemComponent.tsx","../src/editor/nodeViews/ImageComponent.tsx","../src/editor/nodeViews/index.ts","../src/editor/hooks/useProseMirror.ts","../src/editor/editor.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\n\nexport interface ProseMirrorContextType {\n state: EditorState | null;\n view: EditorView | null;\n}\n\nexport const ProseMirrorContext = createContext<ProseMirrorContextType>({\n state: null,\n view: null\n});\n\nexport const useProseMirrorContext = () => useContext(ProseMirrorContext);\n","import { forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\n\nexport interface EditorBubbleProps {\n children: ReactNode;\n options?: any;\n className?: string;\n}\n\nexport const EditorBubble = forwardRef<HTMLDivElement, EditorBubbleProps>(\n ({ children, options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!view || !state) return;\n\n // Delay evaluation slightly to let selection settle\n const timer = setTimeout(() => {\n const { selection } = state;\n const { empty } = selection;\n\n // check if image is selected\n let isImage = false;\n state.doc.nodesBetween(selection.from, selection.to, (node) => {\n if (node.type.name === \"image\") isImage = true;\n });\n\n if (isImage || empty || selection instanceof NodeSelection) {\n setShow(false);\n return;\n }\n\n setShow(true);\n }, 0);\n\n return () => clearTimeout(timer);\n }, [view, state]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n\n // Fallback for end selection coords\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n\n // Recompute coords in case of scroll\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore error if selection is out of bounds\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n className={className}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n onMouseDown={(e) => {\n e.preventDefault(); // Don't lose focus inside ProseMirror\n }}\n >\n {children}\n </div>\n );\n }\n);\n\nEditorBubble.displayName = \"EditorBubble\";\n\nexport default EditorBubble;\n","import { type ComponentPropsWithoutRef, type ReactNode, forwardRef } from \"react\";\nimport { Slot } from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\n\ninterface EditorBubbleItemProps {\n children: ReactNode;\n asChild?: boolean;\n onSelect?: () => void;\n}\n\nexport const EditorBubbleItem = forwardRef<\n HTMLDivElement,\n EditorBubbleItemProps & Omit<ComponentPropsWithoutRef<\"div\">, \"onSelect\">\n>(({ children, asChild, onSelect, ...rest }, ref) => {\n const { view } = useProseMirrorContext();\n const Comp = asChild ? Slot : \"div\";\n\n if (!view) return null;\n\n return (\n <Comp ref={ref} {...rest} onMouseDown={(e: React.MouseEvent) => {\n // Prevent default to avoid losing focus\n e.preventDefault();\n }} onClick={() => onSelect?.()}>\n {children}\n </Comp>\n );\n});\n\nEditorBubbleItem.displayName = \"EditorBubbleItem\";\n\nexport default EditorBubbleItem;\n","import { Plugin, PluginKey, TextSelection } from \"prosemirror-state\";\n\nexport const SlashCommandPluginKey = new PluginKey(\"slash-command\");\n\nexport interface SlashCommandState {\n active: boolean;\n range?: { from: number; to: number };\n query?: string;\n dismissed?: boolean;\n}\n\nexport function slashCommandPlugin() {\n return new Plugin({\n key: SlashCommandPluginKey,\n state: {\n init(): SlashCommandState {\n return { active: false };\n },\n apply(tr, value, oldState, newState): SlashCommandState {\n const meta = tr.getMeta(SlashCommandPluginKey);\n if (meta !== undefined) {\n return meta;\n }\n\n const { selection } = newState;\n if (!(selection instanceof TextSelection) || !selection.empty) {\n return { active: false };\n }\n\n // Make sure we are in a paragraph or heading block, not a code_block for example\n const $anchor = selection.$anchor;\n if ($anchor.parent.type.name === \"code_block\") {\n return { active: false };\n }\n\n const textBefore = $anchor.parent.textBetween(\n Math.max(0, $anchor.parentOffset - 20),\n $anchor.parentOffset,\n undefined,\n \"\\ufffc\"\n );\n const match = textBefore.match(/(?:\\s|^)(\\/)([a-zA-Z0-9]*)$/);\n\n if (!match) {\n return { active: false };\n }\n\n // If the user previously dismissed this slash command, keep it dismissed\n if (value.dismissed) {\n return { active: false,\ndismissed: true };\n }\n\n // match[1] is the slash, match[2] is the query\n const query = match[2];\n const from = $anchor.pos - query.length - 1;\n const to = $anchor.pos;\n return { active: true,\nrange: { from,\nto },\nquery };\n }\n }\n });\n}\n","import { cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { Decoration, DecorationSet, EditorView } from \"prosemirror-view\";\nimport { Plugin, PluginKey } from \"prosemirror-state\";\n\nexport type UploadFn = (image: File) => Promise<string>;\n\nexport async function onFileRead(view: EditorView, readerEvent: ProgressEvent<FileReader>, pos: number, upload: UploadFn, image: File) {\n\n const { schema } = view.state;\n\n // @ts-ignore\n const plugin = view.state.plugins.find((p: Plugin) => p.key === ImagePluginKey.key);\n if (!plugin) {\n console.error(\"Image plugin not found\");\n return;\n }\n\n const decoId = Math.random().toString(36).substring(7);\n const placeholder = document.createElement(\"div\");\n const imageElement = document.createElement(\"img\");\n imageElement.setAttribute(\"class\", \"opacity-40 rounded-lg border \" + defaultBorderMixin);\n imageElement.src = readerEvent.target?.result as string;\n placeholder.appendChild(imageElement);\n\n const deco = Decoration.widget(pos, placeholder, { id: decoId });\n let decorationSet = plugin.getState(view.state);\n decorationSet = decorationSet?.add(view.state.doc, [deco]);\n view.dispatch(view.state.tr.setMeta(plugin, { decorationSet }));\n\n // Image Upload Logic\n const src = await upload(image);\n console.debug(\"Uploaded image\", src);\n\n const replacePlaceholder = () => {\n // Retrieve the LATEST state after the async upload\n let currentDecos = plugin.getState(view.state) as DecorationSet;\n const foundDecos = currentDecos.find(undefined, undefined, spec => spec.id === decoId);\n\n if (foundDecos.length === 0) {\n console.warn(\"Image placeholder removed before upload completed.\");\n return;\n }\n\n // Get the mapped position of the decoration\n const currentPos = foundDecos[0].from;\n\n // Replace placeholder with actual image at the correct mapped position\n const imageNode = view.state.schema.nodes.image.create({ src });\n const tr = view.state.tr.replaceWith(currentPos, currentPos, imageNode);\n\n // Remove placeholder decoration using the LATEST decorationSet\n currentDecos = currentDecos.remove(foundDecos);\n tr.setMeta(plugin, { decorationSet: currentDecos });\n view.dispatch(tr);\n };\n\n // Preload the image so it doesn't cause a layout shift when replacing the placeholder\n const preloader = new Image();\n preloader.src = src;\n preloader.onload = replacePlaceholder;\n preloader.onerror = replacePlaceholder;\n}\n\nexport const ImagePluginKey = new PluginKey(\"imagePlugin\");\n\nexport const createDropImagePlugin = (upload: UploadFn): Plugin => {\n const plugin: Plugin = new Plugin({\n key: ImagePluginKey,\n state: {\n // Initialize the plugin state with an empty DecorationSet\n init: () => DecorationSet.empty,\n // Apply transactions to update the state\n apply: (tr, old) => {\n // Handle custom transaction steps that update decorations\n const meta = tr.getMeta(plugin);\n if (meta && meta.decorationSet) {\n return meta.decorationSet;\n }\n // Map decorations to the new document structure\n return old.map(tr.mapping, tr.doc);\n }\n },\n props: {\n handleDOMEvents: {\n dragover: (view: EditorView, event: DragEvent) => {\n if (event.dataTransfer?.types?.includes(\"Files\")) {\n event.preventDefault();\n return true;\n }\n return false;\n },\n drop: (view: EditorView, event: DragEvent) => {\n if (!event.dataTransfer?.files || event.dataTransfer?.files.length === 0) {\n return false;\n }\n event.preventDefault();\n\n const files = Array.from(event.dataTransfer.files);\n const images = files.filter(file => /image/i.test(file.type));\n\n if (images.length === 0) {\n console.debug(\"No images found in dropped files\");\n return false;\n }\n\n images.forEach(image => {\n const position = view.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n if (!position) return;\n\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, position.pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n\n return true;\n }\n },\n handlePaste(view: EditorView, event: ClipboardEvent) {\n const html = event.clipboardData?.getData(\"text/html\");\n if (html && html.includes(\"<img\")) {\n // Let ProseMirror handle the HTML paste natively (e.g. copy-pasted from the editor itself or a webpage)\n return false;\n }\n\n const items = Array.from(event.clipboardData?.items || []);\n const pos = view.state.selection.from;\n let anyImageFound = false;\n\n items\n .filter((item) => item.type.startsWith(\"image/\"))\n .forEach((item) => {\n const image = item.getAsFile();\n if (image) {\n anyImageFound = true;\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n }\n });\n\n return anyImageFound;\n },\n decorations(state) {\n return plugin.getState(state);\n }\n }\n });\n\n return plugin;\n};\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// Define and export the plugin key\nexport const loadingDecorationKey = new PluginKey<LoadingDecorationState>(\"loadingDecoration\");\n\ninterface LoadingDecorationState {\n decorationSet: DecorationSet;\n hasDecoration: boolean;\n}\n\nexport const textLoadingCommands = {\n toggleLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined, loadingHtml?: string): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos,\n type: \"loadingDecoration\",\n remove: false,\n loadingHtml\n });\n\n dispatch(tr);\n return true;\n },\n\n removeLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos: 0, // We can pass any position as it will remove the entire decoration set\n type: \"loadingDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n};\n\n/**\n * This plugin is used to display streaming content from an LLM.\n */\nexport const textLoadingDecorationPlugin = () => {\n return new Plugin<LoadingDecorationState>({\n key: loadingDecorationKey,\n\n state: {\n init() {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n },\n\n apply(tr, oldState) {\n const action = tr.getMeta(loadingDecorationKey);\n\n if (action?.type === \"loadingDecoration\") {\n const { pos, remove, loadingHtml } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n }\n\n const decoration = Decoration.widget(pos, () => {\n const container = document.createElement(\"span\");\n container.className = \"loading-decoration\";\n\n // Sanitize and append HTML\n if (loadingHtml) {\n container.innerHTML = loadingHtml;\n } else {\n const span = document.createElement(\"span\");\n span.innerText = \"loading...\";\n container.appendChild(span);\n }\n\n return container;\n });\n\n return {\n decorationSet: DecorationSet.empty.add(tr.doc, [decoration]),\n hasDecoration: true\n };\n }\n\n return {\n decorationSet: oldState.decorationSet.map(tr.mapping, tr.doc),\n hasDecoration: oldState.hasDecoration\n };\n }\n },\n\n props: {\n decorations(state) {\n return this.getState(state)?.decorationSet || DecorationSet.empty;\n }\n }\n });\n};\n","\nimport React, { useEffect, useRef, useState, ReactNode } from \"react\";\nimport { Fragment, DOMParser } from \"prosemirror-model\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { SlashCommandPluginKey } from \"../plugins/slashCommandPlugin\";\nimport {\n CheckSquareIcon,\n cls,\n CodeIcon,\n defaultBorderMixin,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n iconSize,\n ImageIcon,\n ListIcon,\n ListOrderedIcon,\n QuoteIcon,\n TableIcon,\n TypeIcon,\n Wand2Icon\n} from \"@rebasepro/ui\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { EditorView } from \"prosemirror-view\";\nimport { TextSelection } from \"prosemirror-state\";\nimport type { EditorAIController } from \"../types\";\nimport { onFileRead, UploadFn } from \"../extensions/Image\";\nimport { textLoadingCommands } from \"../extensions/TextLoadingDecorationExtension\";\nimport { parser } from \"../markdown\";\n\ninterface SuggestionItem {\n title: string;\n description: string;\n icon: ReactNode;\n searchTerms?: string[];\n command: (\n view: EditorView,\n range: { from: number; to: number },\n upload: UploadFn,\n aiController?: EditorAIController,\n setSubView?: (viewId: string | null) => void\n ) => void;\n}\n\nconst suggestionItems: SuggestionItem[] = [\n {\n title: \"Text\",\n description: \"Just start typing with plain text.\",\n searchTerms: [\"p\", \"paragraph\"],\n icon: <TypeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n }\n },\n {\n title: \"To-do List\",\n description: \"Track tasks with a to-do list.\",\n searchTerms: [\"todo\", \"task\", \"list\", \"check\", \"checkbox\"],\n icon: <CheckSquareIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.task_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 1\",\n description: \"Big section heading.\",\n searchTerms: [\"title\", \"big\", \"large\"],\n icon: <Heading1Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 1 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 2\",\n description: \"Medium section heading.\",\n searchTerms: [\"subtitle\", \"medium\"],\n icon: <Heading2Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 2 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 3\",\n description: \"Small section heading.\",\n searchTerms: [\"subtitle\", \"small\"],\n icon: <Heading3Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 3 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Bullet List\",\n description: \"Create a simple bullet list.\",\n searchTerms: [\"unordered\", \"point\"],\n icon: <ListIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.bullet_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Numbered List\",\n description: \"Create a list with numbering.\",\n searchTerms: [\"ordered\"],\n icon: <ListOrderedIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.ordered_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Quote\",\n description: \"Capture a quote.\",\n searchTerms: [\"blockquote\"],\n icon: <QuoteIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapIn(schema.nodes.blockquote)(view.state, view.dispatch);\n }\n },\n {\n title: \"Code\",\n description: \"Capture a code snippet.\",\n searchTerms: [\"codeblock\"],\n icon: <CodeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.code_block)(view.state, view.dispatch);\n }\n },\n {\n title: \"Image\",\n description: \"Upload an image from your computer.\",\n searchTerms: [\"photo\", \"picture\", \"media\", \"upload\", \"file\"],\n icon: <ImageIcon size={iconSize.small}/>,\n command: (view, range, upload) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = async () => {\n if (input.files?.length) {\n const file = input.files[0];\n if (!file) return;\n const pos = view.state.selection.from;\n\n const images = Array.from(input.files).filter(f => /image/i.test(f.type));\n if (images.length === 0) return false;\n\n images.forEach(image => {\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n }\n return true;\n };\n input.click();\n }\n },\n {\n title: \"Table\",\n description: \"Insert a custom grid table.\",\n searchTerms: [\"table\", \"grid\", \"row\", \"col\"],\n icon: <TableIcon size={iconSize.small}/>,\n command: (view, range, upload, aiController, setSubView) => {\n if (setSubView) setSubView(\"table-grid\");\n }\n }\n];\n\nconst autocompleteSuggestionItem: SuggestionItem = {\n title: \"Autocomplete\",\n description: \"Add text based on the context.\",\n searchTerms: [\"ai\"],\n icon: <Wand2Icon size={iconSize.small}/>,\n command: async (view, range, upload, aiController) => {\n if (!aiController) throw Error(\"No AiController\");\n\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n\n const { state } = view;\n const { from, to } = state.selection;\n\n const textBeforeCursor = state.doc.textBetween(0, from, \"\\n\");\n const textAfterCursor = state.doc.textBetween(to, state.doc.content.size, \"\\n\");\n\n let buffer = \"\";\n const result = await aiController.autocomplete(textBeforeCursor, textAfterCursor, (delta) => {\n buffer += delta;\n if (delta.length !== 0) {\n textLoadingCommands.toggleLoadingDecoration(view.state, view.dispatch, buffer);\n }\n });\n\n // Insert parsed text result at cursor natively\n try {\n // The AI controller might stream literal \"\\n\" characters depending on its JSON decoding layer.\n // We need to un-escape these back to genuine newlines so MarkdownIt block-parsing works.\n const unescapedResult = result.replace(/\\\\n/g, \"\\n\").replace(/\\\\t/g, \"\\t\");\n\n const isHTML = /<\\/?[a-z][\\s\\S]*>/i.test(unescapedResult);\n let parsedDoc;\n\n if (isHTML) {\n const div = document.createElement(\"div\");\n div.innerHTML = unescapedResult;\n parsedDoc = DOMParser.fromSchema(view.state.schema).parse(div);\n } else {\n parsedDoc = parser.parse(unescapedResult);\n }\n\n if (parsedDoc) {\n const tr = view.state.tr.replaceWith(view.state.selection.from, view.state.selection.from, parsedDoc.content);\n view.dispatch(tr);\n } else {\n view.dispatch(view.state.tr.insertText(unescapedResult));\n }\n } catch (e) {\n console.error(e);\n view.dispatch(view.state.tr.insertText(result));\n }\n }\n};\n\nexport const SlashCommandMenu = ({ upload, aiController }: { upload: UploadFn, aiController?: EditorAIController }) => {\n const { view, state } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [subView, setSubView] = useState<string | null>(null);\n const [tableGridCoords, setTableGridCoords] = useState({ r: 0,\nc: 0 });\n\n const pluginState = state ? SlashCommandPluginKey.getState(state) : null;\n const isActive = pluginState?.active;\n const query = pluginState?.query || \"\";\n const range = pluginState?.range;\n\n const filteredItems = React.useMemo(() => {\n if (!isActive) return [];\n const availableItems = [...suggestionItems];\n if (aiController) availableItems.push(autocompleteSuggestionItem);\n\n return availableItems.filter(item => {\n const inTitle = item.title.toLowerCase().includes(query.toLowerCase());\n if (inTitle) return inTitle;\n return item.searchTerms?.some(term => term.toLowerCase().includes(query.toLowerCase()));\n });\n }, [query, isActive, aiController]);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n useEffect(() => {\n if (!isActive) setSubView(null);\n }, [isActive]);\n\n useEffect(() => {\n if (!view || !isActive || !range || !menuRef.current) return;\n\n const start = view.coordsAtPos(range.from);\n const virtualEl = {\n getBoundingClientRect() {\n return {\n width: 0,\n height: start.bottom - start.top,\n x: start.left,\n y: start.top,\n top: start.top,\n left: start.left,\n right: start.left,\n bottom: start.bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: \"bottom-start\",\n middleware: [offset(4), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [view, isActive, range]);\n\n useEffect(() => {\n if (!isActive || !view) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (subView === \"table-grid\") {\n if (e.key === \"Escape\") {\n e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.max(0, prev.r - 1),\nc: prev.c }));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.min(4, prev.r + 1),\nc: prev.c }));\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.max(0, prev.c - 1) }));\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.min(4, prev.c + 1) }));\n } else if (e.key === \"Enter\") {\n e.preventDefault(); e.stopPropagation();\n if (range) {\n const tableNode = createTableNode(view.state.schema, tableGridCoords.r + 1, tableGridCoords.c + 1);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + filteredItems.length - 1) % filteredItems.length);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + 1) % filteredItems.length);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n if (filteredItems[selectedIndex] && range) {\n filteredItems[selectedIndex].command(view, range, upload, aiController, setSubView);\n // Do not focus view if a subview opened\n setTimeout(() => {\n // Focus is managed by the caller\n }, 0);\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n // Close menu gracefully and keep it dismissed\n view.dispatch(view.state.tr.setMeta(SlashCommandPluginKey, { active: false,\ndismissed: true }));\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => window.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [isActive, selectedIndex, filteredItems, view, range, upload, aiController, subView, tableGridCoords]);\n\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n useEffect(() => {\n if (itemRefs.current[selectedIndex]) {\n itemRefs.current[selectedIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useEffect(() => {\n if (!subView) {\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }, [subView]);\n\n if (!isActive || filteredItems.length === 0) return null;\n\n if (subView === \"table-grid\" && range && view) {\n return (\n <div\n ref={menuRef}\n onMouseDown={(e) => e.preventDefault()}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white rounded-md border bg-white dark:bg-surface-800 p-2 shadow transition-none\", defaultBorderMixin)}\n >\n <TableGridPicker\n hoveredRow={tableGridCoords.r}\n hoveredCol={tableGridCoords.c}\n onHover={(r, c) => setTableGridCoords({ r,\nc })}\n onSelect={(rows, cols) => {\n const tableNode = createTableNode(view.state.schema, rows, cols);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={menuRef}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white max-h-[280px] w-72 overflow-y-auto rounded-md border bg-white dark:bg-surface-800 px-1 py-2 shadow transition-none\", defaultBorderMixin)}\n >\n {filteredItems.map((item, index) => (\n <button\n key={item.title}\n ref={el => { itemRefs.current[index] = el; }}\n onClick={(e) => {\n e.preventDefault();\n if (range && view) {\n item.command(view, range, upload, aiController, setSubView);\n // Only focus back to editor if it didn't open a sub-view\n if (!subView) view.focus();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n className={cls(\"flex w-full items-center space-x-2 rounded-md px-2 py-1 text-left text-sm hover:bg-blue-50 hover:dark:bg-surface-700\",\n index === selectedIndex ? \"bg-blue-100 dark:bg-surface-accent-950\" : \"\")}\n >\n <div className={cls(\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border bg-white dark:bg-surface-800\", defaultBorderMixin)}>\n {item.icon}\n </div>\n <div className=\"flex flex-col overflow-hidden\">\n <p className=\"font-medium truncate\">{item.title}</p>\n <p className=\"text-xs text-surface-700 dark:text-surface-accent-300 truncate\">\n {item.description}\n </p>\n </div>\n </button>\n ))}\n </div>\n );\n};\n\nconst createTableNode = (schema: import(\"prosemirror-model\").Schema, rowsCount: number, colsCount: number) => {\n const rows = [];\n for (let r = 0; r < rowsCount; r++) {\n const cells = [];\n for (let c = 0; c < colsCount; c++) {\n const isHeader = r === 0;\n const cellType = isHeader ? schema.nodes.table_header : schema.nodes.table_cell;\n const cell = cellType.createAndFill();\n if (cell) cells.push(cell);\n }\n const row = schema.nodes.table_row.create(null, Fragment.from(cells));\n rows.push(row);\n }\n return schema.nodes.table.create(null, Fragment.from(rows));\n};\n\nconst TableGridPicker = ({\n hoveredRow,\n hoveredCol,\n onHover,\n onSelect\n}: {\n hoveredRow: number;\n hoveredCol: number;\n onHover: (r: number, c: number) => void;\n onSelect: (r: number, c: number) => void;\n}) => {\n return (\n <div className=\"flex flex-col gap-1 items-center justify-center p-1 w-fit\">\n <span className=\"text-xs text-gray-500 font-medium mb-1\">\n {hoveredCol + 1} x {hoveredRow + 1} Table\n </span>\n <div className=\"flex flex-col gap-1\">\n {Array.from({ length: 5 }).map((_, r) => (\n <div key={r} className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, c) => (\n <div\n key={c}\n className={cls(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors duration-75\",\n r <= hoveredRow && c <= hoveredCol\n ? \"bg-blue-100 border-blue-400 dark:bg-blue-900 dark:border-blue-500\"\n : \"bg-white dark:bg-surface-800 border-gray-200 dark:border-gray-700 hover:border-blue-300\"\n )}\n onMouseEnter={() => onHover(r, c)}\n onClick={() => onSelect(hoveredRow + 1, hoveredCol + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n};\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\nimport { TextField, defaultBorderMixin, Typography, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nexport interface ImageBubbleProps {\n options?: any;\n className?: string;\n}\n\nexport const ImageBubble = forwardRef<HTMLDivElement, ImageBubbleProps>(\n ({ options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n const [alt, setAlt] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [imagePos, setImagePos] = useState<number | null>(null);\n\n useEffect(() => {\n if (!view) return;\n const handleContextMenu = (e: MouseEvent) => {\n const posInfo = view.posAtCoords({ left: e.clientX,\ntop: e.clientY });\n if (posInfo && posInfo.inside >= 0) {\n const node = view.state.doc.nodeAt(posInfo.inside);\n if (node && node.type.name === \"image\") {\n e.preventDefault();\n const tr = view.state.tr.setSelection(NodeSelection.create(view.state.doc, posInfo.inside));\n view.dispatch(tr);\n setShow(true);\n setAlt(node.attrs.alt || \"\");\n setTitle(node.attrs.title || \"\");\n setImagePos(posInfo.inside);\n }\n }\n };\n view.dom.addEventListener(\"contextmenu\", handleContextMenu);\n\n const handleMousedown = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node) && e.button !== 2) {\n setShow(false);\n }\n };\n document.addEventListener(\"mousedown\", handleMousedown);\n\n return () => {\n view.dom.removeEventListener(\"contextmenu\", handleContextMenu);\n document.removeEventListener(\"mousedown\", handleMousedown);\n };\n }, [view]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"bottom\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n const handleSave = (newAlt: string, newTitle: string) => {\n if (imagePos !== null && view) {\n const node = view.state.doc.nodeAt(imagePos);\n if (node && node.type.name === \"image\") {\n const tr = view.state.tr.setNodeMarkup(imagePos, undefined, {\n ...node.attrs,\n alt: newAlt,\n title: newTitle\n });\n // Preserve the node selection so the bubble stays open!\n tr.setSelection(NodeSelection.create(tr.doc, imagePos));\n view.dispatch(tr);\n }\n }\n };\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n style={{ visibility: \"hidden\",\nposition: \"fixed\",\nzIndex: 50 }}\n className={cls(\"flex flex-col gap-1.5 p-2 w-56 max-w-[90vw] rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from inputs\n // but we don't want to prevent typing\n // Only prevent if clicking on the container background\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }}\n >\n <TextField\n size={\"small\"}\n placeholder={t(\"alt_text\")}\n value={alt}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setAlt(e.target.value);\n handleSave(e.target.value, title);\n }}\n />\n <TextField\n size={\"small\"}\n placeholder={t(\"title\")}\n value={title}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setTitle(e.target.value);\n handleSave(alt, e.target.value);\n }}\n />\n </div>\n );\n }\n);\n\nImageBubble.displayName = \"ImageBubble\";\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { IconButton, Tooltip, defaultBorderMixin, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport {\n addColumnBefore,\n addColumnAfter,\n deleteColumn,\n addRowBefore,\n addRowAfter,\n deleteRow,\n deleteTable\n} from \"prosemirror-tables\";\nimport { EditorState } from \"prosemirror-state\";\n\n\nexport interface TableBubbleProps {\n options?: any;\n className?: string;\n}\n\nconst isSelectionInTable = (state: EditorState) => {\n const { $from } = state.selection;\n for (let d = $from.depth; d > 0; d--) {\n if ($from.node(d).type.name === \"table\") {\n return true;\n }\n }\n return false;\n};\n\n// We create separate icon components if they don't exist in @rebasepro/ui\n// using basic SVGs for now, or we can use existing ones if we know them.\n// Wait, I will use generic SVGs for these since I don't know if @rebasepro/ui has them.\n\nexport const TableBubble = forwardRef<HTMLDivElement, TableBubbleProps>(\n ({ options, className }, ref) => {\n const { view, state } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!state) return;\n setShow(isSelectionInTable(state));\n }, [state?.selection]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const { from, to } = state.selection;\n\n // Safety measure: if view.docView is destroyed, coordsAtPos might crash\n if (view.isDestroyed) return;\n\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n bottom,\n left,\n right\n } as DOMRect;\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current || view.isDestroyed) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show || !view || !state) return null;\n\n const executeCommand = (cmd: (state: EditorState, dispatch?: (tr: import(\"prosemirror-state\").Transaction) => void) => boolean) => {\n cmd(state, view.dispatch);\n view.focus();\n };\n\n return (\n <div\n ref={menuRef}\n style={{ visibility: \"hidden\",\nposition: \"fixed\",\nzIndex: 50 }}\n className={cls(\"flex flex-row gap-1 p-1 rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from the editor\n e.preventDefault();\n }}\n >\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_row_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_row_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"20\"></line><line x1=\"8\" y1=\"16\" x2=\"16\" y2=\"16\"></line><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_row\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteRow)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_column_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_column_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"12\" x2=\"20\" y2=\"12\"></line><line x1=\"16\" y1=\"8\" x2=\"16\" y2=\"16\"></line><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"></line></svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_column\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteColumn)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\"></line><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <Tooltip title={t(\"delete_table\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteTable)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"><polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line></svg>\n </IconButton>\n </Tooltip>\n </div>\n );\n }\n);\n\nTableBubble.displayName = \"TableBubble\";\n","import { EditorState, TextSelection, Transaction } from \"prosemirror-state\";\nimport { MarkType, NodeType, Node as ProseMirrorNode } from \"prosemirror-model\";\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n if (!state || !type) return false;\n const { from, $from, to, empty } = state.selection;\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks());\n return state.doc.rangeHasMark(from, to, type);\n}\n\nexport function isNodeActive(state: EditorState, type: NodeType, attrs: Record<string, unknown> = {}) {\n if (!state || !type) return false;\n const selection = state.selection;\n const { $from, to } = selection;\n const node = selection instanceof TextSelection ? undefined : (selection as { node?: ProseMirrorNode }).node;\n if (node) {\n return node.type === type && (!attrs || Object.keys(attrs).every((key) => node.attrs[key] === attrs[key]));\n }\n return to <= $from.end() && $from.parent.type === type && (!attrs || Object.keys(attrs).every((key) => $from.parent.attrs[key] === attrs[key]));\n}\n\nexport function getMarkAttributes(state: EditorState, type: MarkType) {\n if (!state || !type) return {};\n const { from, $from, to, empty } = state.selection;\n let mark;\n if (empty) {\n mark = type.isInSet(state.storedMarks || $from.marks());\n } else {\n let found = false;\n state.doc.nodesBetween(from, to, (node) => {\n if (found) return false;\n const m = type.isInSet(node.marks);\n if (m) {\n mark = m;\n found = true;\n }\n return true;\n });\n }\n return mark ? mark.attrs : {};\n}\n\nexport function setMark(type: MarkType, attrs?: Record<string, unknown>) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n if ($cursor) {\n dispatch(state.tr.addStoredMark(type.create(attrs)));\n } else {\n const tr = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.addMark($from.pos, $to.pos, type.create(attrs));\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n\nexport function unsetMark(type: MarkType) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n const tr = state.tr;\n if ($cursor) {\n const parent = $cursor.parent;\n let markStart = -1;\n let markEnd = -1;\n let currentMarkStart = -1;\n\n parent.forEach((child: ProseMirrorNode, offset: number) => {\n const childStart = $cursor.start() + offset;\n const childEnd = childStart + child.nodeSize;\n\n if (type.isInSet(child.marks)) {\n if (currentMarkStart === -1) currentMarkStart = childStart;\n if ($cursor.pos >= childStart && $cursor.pos <= childEnd) {\n markStart = currentMarkStart;\n }\n } else {\n if (currentMarkStart !== -1) {\n if (markStart !== -1 && markEnd === -1) markEnd = childStart;\n currentMarkStart = -1;\n }\n }\n });\n\n if (markStart !== -1 && markEnd === -1) {\n markEnd = $cursor.end();\n }\n\n if (markStart !== -1 && markEnd !== -1) {\n tr.removeMark(markStart, markEnd, type);\n }\n tr.removeStoredMark(type);\n dispatch(tr.scrollIntoView());\n } else {\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.removeMark($from.pos, $to.pos, type);\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nimport {\n Button,\n CheckIcon,\n CheckSquareIcon,\n ChevronDownIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n iconSize,\n ListIcon,\n ListOrderedIcon,\n Popover,\n QuoteIcon,\n TypeIcon\n} from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isNodeActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\n\nexport type SelectorItem = {\n name: string;\n labelKey: string;\n icon: React.ElementType;\n command: (state: EditorState, dispatch: (tr: Transaction) => void) => void;\n isActive: (state: EditorState) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: \"Text\",\n labelKey: \"editor_text\",\n icon: TypeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.paragraph)(state, dispatch),\n isActive: (state) =>\n isNodeActive(state, schema.nodes.paragraph) &&\n !isNodeActive(state, schema.nodes.bullet_list) &&\n !isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Heading 1\",\n labelKey: \"editor_heading_1\",\n icon: Heading1Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 1 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 1 })\n },\n {\n name: \"Heading 2\",\n labelKey: \"editor_heading_2\",\n icon: Heading2Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 2 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 2 })\n },\n {\n name: \"Heading 3\",\n labelKey: \"editor_heading_3\",\n icon: Heading3Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 3 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 3 })\n },\n {\n name: \"To-do List\",\n labelKey: \"editor_todo_list\",\n icon: CheckSquareIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.task_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.task_item)\n },\n {\n name: \"Bullet List\",\n labelKey: \"editor_bullet_list\",\n icon: ListIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.bullet_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.bullet_list)\n },\n {\n name: \"Numbered List\",\n labelKey: \"editor_numbered_list\",\n icon: ListOrderedIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.ordered_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Quote\",\n labelKey: \"editor_quote\",\n icon: QuoteIcon,\n command: (state, dispatch) => wrapIn(schema.nodes.blockquote)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.blockquote)\n },\n {\n name: \"Code\",\n labelKey: \"editor_code\",\n icon: CodeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.code_block)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.code_block)\n }\n];\n\ninterface NodeSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n portalContainer: HTMLElement | null;\n}\n\nexport const NodeSelector = ({\n open,\n onOpenChange,\n portalContainer\n}: NodeSelectorProps) => {\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n if (!state || !view) return null;\n\n const activeItem = items.filter((item) => item.isActive(state)).pop() ?? {\n name: \"Multiple\",\n labelKey: \"editor_multiple\"\n };\n\n return (\n <Popover\n sideOffset={5}\n align=\"start\"\n portalContainer={portalContainer}\n className=\"w-48 p-1\"\n trigger={<Button variant=\"text\"\n className=\"gap-2 rounded-none\"\n color=\"text\">\n <span className=\"whitespace-nowrap text-sm\">{t(activeItem.labelKey)}</span>\n <ChevronDownIcon size={iconSize.small}/>\n </Button>}\n modal={true}\n open={open}\n onOpenChange={onOpenChange}>\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }}\n className=\"flex cursor-pointer items-center justify-between rounded px-2 py-1 text-sm hover:bg-blue-50 hover:dark:bg-surface-700 text-surface-900 dark:text-white\"\n >\n <div className=\"flex items-center space-x-2\">\n <item.icon size={iconSize.smallest}/>\n <span>{t(item.labelKey)}</span>\n </div>\n {activeItem.name === item.name && <CheckIcon size={iconSize.smallest}/>}\n </EditorBubbleItem>\n ))}\n </Popover>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Button, CheckIcon, cls, focusedDisabled, iconSize, Popover, Trash2Icon } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { getMarkAttributes, isMarkActive, setMark, unsetMark } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\n\nexport function isValidUrl(url: string) {\n try {\n new URL(url);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function getUrlFromString(str: string) {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes(\".\") && !str.includes(\" \")) {\n return new URL(`https://${str}`).toString();\n }\n return null;\n } catch (e) {\n return null;\n }\n}\n\ninterface LinkSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const LinkSelector = ({\n open,\n onOpenChange\n}: LinkSelectorProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n\n // Autofocus on input by default\n useEffect(() => {\n if (open && inputRef.current) {\n inputRef.current.focus();\n }\n }, [open]);\n\n if (!state || !view) return null;\n\n const handleSubmit = (e: any) => {\n e.preventDefault();\n const value = inputRef.current?.value;\n if (!value) return;\n const url = getUrlFromString(value);\n if (url) {\n setMark(schema.marks.link, { href: url })(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }\n };\n\n const handleRemoveLink = () => {\n unsetMark(schema.marks.link)(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n };\n\n const isActive = isMarkActive(state, schema.marks.link);\n const href = getMarkAttributes(state, schema.marks.link).href || \"\";\n\n return (\n <Popover modal={true}\n open={open}\n onOpenChange={onOpenChange}\n trigger={<Button variant=\"text\"\n type=\"button\"\n className=\"gap-2 rounded-none\"\n color={\"text\"}>\n <p className={cls(\"underline decoration-stone-400 underline-offset-4\", {\n \"text-blue-500\": isActive\n })}>\n {t(\"editor_link\")}\n </p>\n </Button>}>\n <form\n onSubmit={handleSubmit}\n className=\"flex p-1 gap-1\"\n >\n <input\n ref={inputRef}\n autoFocus={open}\n placeholder={t(\"editor_paste_or_type_link\")}\n defaultValue={href}\n className={cls(\"text-surface-900 dark:text-white flex-grow bg-transparent p-1 text-sm outline-none\", focusedDisabled)}/>\n\n {href ? (\n <Button\n size={\"small\"}\n variant=\"text\"\n type=\"button\"\n color={\"text\"}\n className=\"flex items-center\"\n onClick={handleRemoveLink}\n >\n <Trash2Icon size={iconSize.small}/>\n </Button>\n ) : (\n <Button size={\"small\"}\n type=\"submit\"\n variant={\"text\"}>\n <CheckIcon size={iconSize.small}/>\n </Button>\n )}\n </form>\n </Popover>\n );\n};\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport type { SelectorItem } from \"./node-selector\";\nimport { BoldIcon, Button, cls, CodeIcon, ItalicIcon, StrikethroughIcon, UnderlineIcon } from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isMarkActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { toggleMark } from \"prosemirror-commands\";\n\nexport const TextButtons = () => {\n const { state, view } = useProseMirrorContext();\n if (!state || !view) return null;\n\n // We pass state directly to isActive, and dispatch to command\n const items = [\n {\n name: \"bold\",\n labelKey: \"editor_bold\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.bold),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.bold)(s, dispatch),\n icon: BoldIcon\n },\n {\n name: \"italic\",\n labelKey: \"editor_italic\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.italic),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.italic)(s, dispatch),\n icon: ItalicIcon\n },\n {\n name: \"underline\",\n labelKey: \"editor_underline\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.underline),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.underline)(s, dispatch),\n icon: UnderlineIcon\n },\n {\n name: \"strike\",\n labelKey: \"editor_strikethrough\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.strike),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.strike)(s, dispatch),\n icon: StrikethroughIcon\n },\n {\n name: \"code\",\n labelKey: \"editor_code\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.code),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.code)(s, dispatch),\n icon: CodeIcon\n }\n ];\n\n return (\n <div className=\"flex\">\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n }}\n >\n <Button size={\"small\"}\n color=\"text\"\n className=\"gap-2 rounded-none h-full\"\n variant=\"text\">\n <item.icon\n className={cls({\n \"text-inherit\": !item.isActive(state),\n \"text-blue-500\": item.isActive(state)\n })}\n />\n </Button>\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n","export function removeClassesFromJson(jsonObj: any): any {\n // If it's an array, apply the function to each element\n if (Array.isArray(jsonObj)) {\n return jsonObj.map(item => removeClassesFromJson(item));\n } else if (typeof jsonObj === \"object\" && jsonObj !== null) { // If it's an object, recurse through its properties\n // If the object has an `attrs` property and `class` field, delete the `class` field\n if (jsonObj.attrs && typeof jsonObj.attrs === \"object\" && \"class\" in jsonObj.attrs) {\n delete jsonObj.attrs.class;\n }\n\n // Apply the function recursively to object properties\n Object.keys(jsonObj).forEach(key => {\n jsonObj[key] = removeClassesFromJson(jsonObj[key]);\n });\n }\n return jsonObj;\n}\n","import { DOMSerializer, Slice } from \"prosemirror-model\"\nimport { EditorView } from \"prosemirror-view\";\n\nexport function serializeForClipboard(view: EditorView, slice: Slice) {\n view.someProp(\"transformCopied\", f => {\n slice = f(slice!, view)\n })\n\n const context = [];\n let {\n content,\n openStart,\n openEnd\n } = slice\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild!.childCount == 1) {\n openStart--\n openEnd--\n const node = content.firstChild!\n // @ts-ignore\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null)\n content = node.content\n }\n\n const serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema)\n const doc = detachedDoc(), wrap = doc.createElement(\"div\")\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }))\n\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n const wrapper = doc.createElement(needsWrap[i])\n while (wrap.firstChild) wrapper.appendChild(wrap.firstChild)\n wrap.appendChild(wrapper)\n wrappers++\n }\n firstChild = wrap.firstChild\n }\n\n if (firstChild && firstChild.nodeType == 1)\n (firstChild as HTMLElement).setAttribute(\n \"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`)\n\n const text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\")\n\n return {\n dom: wrap,\n text,\n slice\n }\n}\n\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap: { [node: string]: string[] } = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n}\n\nlet _detachedDoc: Document | null = null\n\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"))\n}\n","import { NodeSelection, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { Slice } from \"prosemirror-model\";\nimport { serializeForClipboard } from \"./clipboard\";\n\n/** ProseMirror internal drag state — not exposed in type definitions */\ninterface ProseMirrorDragState {\n slice: Slice;\n move: boolean;\n node?: NodeSelection;\n}\n\n/** EditorView with access to the internal `dragging` property */\ninterface EditorViewWithDrag extends EditorView {\n dragging: ProseMirrorDragState | null;\n}\n\nexport interface DragHandleOptions {\n /**\n * The width of the drag handle\n */\n dragHandleWidth: number;\n}\n\nfunction absoluteRect(element: Element) {\n const data = element.getBoundingClientRect();\n\n let ancestor = element.parentElement;\n while (ancestor && window.getComputedStyle(ancestor).position === \"static\") {\n ancestor = ancestor.parentElement;\n }\n const ancestorRect = ancestor?.getBoundingClientRect();\n\n return {\n top: data.top - (ancestorRect?.top ?? 0),\n left: data.left - (ancestorRect?.left ?? 0),\n width: data.width\n };\n}\n\nfunction nodeDOMAtCoords(coords: { x: number; y: number }, view: EditorView) {\n const editorRect = view.dom.getBoundingClientRect();\n\n // 0. Give up if outside vertical bounds or too far horizontally\n if (coords.y < editorRect.top || coords.y > editorRect.bottom) return undefined;\n if (coords.x < editorRect.left - 100 || coords.x > editorRect.right + 50) return undefined;\n\n const blockSelector = 'li, p, pre, blockquote, h1, h2, h3, h4, h5, h6, img, [data-type=\"taskList\"]';\n\n // 1. First probe exactly at the mouse coordinates\n const elem = document.elementFromPoint(coords.x, coords.y);\n const block = elem?.closest(blockSelector);\n if (block && view.dom.contains(block) && block.textContent?.trim()) {\n const li = block.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : block;\n }\n\n // 2. If mouse is in the left gutter, probe horizontally into the editor\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n if (coords.x > probeX) return undefined;\n\n const probeElem = document.elementFromPoint(probeX, coords.y);\n const probeBlock = probeElem?.closest(blockSelector);\n if (probeBlock && probeBlock.textContent?.trim()) {\n // Ensure the found block is actually inside our editor\n if (view.dom.contains(probeBlock)) {\n const li = probeBlock.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : probeBlock;\n }\n }\n\n return undefined;\n}\n\nfunction nodePosAtDOM(node: Element, view: EditorView, options: DragHandleOptions) {\n try {\n if (!view.dom.contains(node)) return null;\n const pos = view.posAtDOM(node, 0);\n const $pos = view.state.doc.resolve(pos);\n // posAtDOM(node, 0) generally returns the position inside the node.\n // We want the position right before the node to create a NodeSelection.\n if ($pos.depth > 0) {\n return $pos.before();\n }\n return pos;\n } catch (e) {\n return null;\n }\n}\n\nexport function dragHandlePlugin(options: DragHandleOptions = { dragHandleWidth: 24 }) {\n function handleDragStart(event: DragEvent, view: EditorView) {\n view.focus();\n\n if (!event.dataTransfer) return;\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (nodePos == null || nodePos < 0) return;\n\n const draggedNodeSelection = NodeSelection.create(view.state.doc, nodePos);\n view.dispatch(view.state.tr.setSelection(draggedNodeSelection));\n\n const slice = view.state.selection.content();\n const {\n dom,\n text\n } = serializeForClipboard(view as EditorViewWithDrag, slice);\n\n event.dataTransfer.clearData();\n event.dataTransfer.setData(\"text/html\", dom.innerHTML);\n event.dataTransfer.setData(\"text/plain\", text);\n event.dataTransfer.effectAllowed = \"copyMove\";\n\n event.dataTransfer.setDragImage(node, 0, 0);\n\n (view as EditorViewWithDrag).dragging = {\n slice,\n move: true,\n node: draggedNodeSelection\n };\n }\n\n function handleClick(event: MouseEvent, view: EditorView) {\n view.focus();\n\n view.dom.classList.remove(\"dragging\");\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (!nodePos) return;\n\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, nodePos)));\n }\n\n let dragHandleElement: HTMLElement | null = null;\n\n function hideDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.add(\"hide\");\n dragHandleElement.style.opacity = \"0\";\n dragHandleElement.style.pointerEvents = \"none\";\n }\n }\n\n function showDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.remove(\"hide\");\n dragHandleElement.style.opacity = \"1\";\n dragHandleElement.style.pointerEvents = \"auto\";\n }\n }\n\n return new Plugin({\n view: (view) => {\n dragHandleElement = document.createElement(\"div\");\n dragHandleElement.draggable = true;\n dragHandleElement.dataset.dragHandle = \"\";\n dragHandleElement.classList.add(\"drag-handle\");\n dragHandleElement.addEventListener(\"dragstart\", (e) => {\n handleDragStart(e, view);\n });\n dragHandleElement.addEventListener(\"click\", (e) => {\n handleClick(e, view);\n });\n const onMouseMove = (event: MouseEvent) => {\n if (!view.editable) {\n return;\n }\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) {\n hideDragHandle();\n return;\n }\n\n const compStyle = window.getComputedStyle(node);\n const lineHeight = parseInt(compStyle.lineHeight, 10);\n const paddingTop = parseInt(compStyle.paddingTop, 10);\n\n const rect = absoluteRect(node);\n if (!rect) {\n hideDragHandle();\n return;\n }\n\n rect.top += (lineHeight - 24) / 2;\n rect.top += paddingTop;\n // Li markers\n if (node.matches(\"ul:not([data-type=taskList]) li, ol li\")) {\n rect.left -= options.dragHandleWidth;\n }\n rect.width = options.dragHandleWidth;\n\n if (!dragHandleElement) return;\n\n dragHandleElement.style.left = `${rect.left - rect.width}px`;\n dragHandleElement.style.top = `${rect.top}px`;\n showDragHandle();\n };\n\n window.addEventListener(\"mousemove\", onMouseMove);\n\n hideDragHandle();\n\n view?.dom?.parentElement?.appendChild(dragHandleElement);\n\n return {\n destroy: () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n dragHandleElement?.remove?.();\n dragHandleElement = null;\n }\n };\n },\n props: {\n handleDOMEvents: {\n keydown: () => {\n hideDragHandle();\n },\n mousewheel: () => {\n hideDragHandle();\n },\n // dragging class is used for CSS\n dragstart: (view) => {\n view.dom.classList.add(\"dragging\");\n },\n drop: (view) => {\n view.dom.classList.remove(\"dragging\");\n },\n dragend: (view) => {\n view.dom.classList.remove(\"dragging\");\n }\n }\n }\n });\n}\n\nimport { dropPoint } from \"prosemirror-transform\";\n\nexport function globalDragDropPlugin() {\n let dropCursorElement: HTMLElement | null = null;\n let cleanup: (() => void) | null = null;\n\n function updateDropCursorColor(el: HTMLElement) {\n const isDark = document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n const varName = isDark ? \"--color-surface-accent-300\" : \"--color-surface-accent-600\";\n const color = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n el.style.backgroundColor = color || (isDark ? \"#cbd5e1\" : \"#475569\");\n }\n\n return new Plugin({\n view(editorView) {\n dropCursorElement = document.createElement(\"div\");\n dropCursorElement.className = \"prosemirror-dropcursor-block\";\n dropCursorElement.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; height: 2px;\";\n updateDropCursorColor(dropCursorElement);\n\n // Watch for theme changes\n const observer = new MutationObserver(() => {\n if (dropCursorElement) updateDropCursorColor(dropCursorElement);\n });\n observer.observe(document.documentElement, { attributes: true,\nattributeFilter: [\"data-theme\"] });\n\n const removeCursor = () => {\n if (dropCursorElement && dropCursorElement.parentNode) {\n dropCursorElement.parentNode.removeChild(dropCursorElement);\n }\n };\n\n const getBlockInsertionPoint = (event: DragEvent, clampedX: number) => {\n const pos = editorView.posAtCoords({ left: clampedX,\ntop: event.clientY });\n if (!pos) return null;\n\n const $pos = editorView.state.doc.resolve(pos.pos);\n\n let blockDepth = 0;\n for (let i = $pos.depth; i > 0; i--) {\n const name = $pos.node(i).type.name;\n if (name === \"list_item\" || name === \"taskItem\") {\n blockDepth = i;\n break;\n }\n if ($pos.node(i).isBlock && name !== \"bullet_list\" && name !== \"ordered_list\" && name !== \"taskList\") {\n blockDepth = i;\n }\n }\n\n if (blockDepth === 0) return pos.pos;\n\n const nodeBeforePos = $pos.before(blockDepth);\n const nodeAfterPos = $pos.after(blockDepth);\n\n const domNode = editorView.nodeDOM(nodeBeforePos);\n if (domNode instanceof HTMLElement) {\n const rect = domNode.getBoundingClientRect();\n const isTopHalf = event.clientY < rect.top + rect.height / 2;\n return isTopHalf ? nodeBeforePos : nodeAfterPos;\n }\n return pos.pos;\n };\n\n const handleDragOver = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n // If it's a native slice drag (no explicitly captured node from our drag handle)\n // then we bail out here and let ProseMirror native drop logic and native dropcursor handle it\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault(); // browser requires this to allow drop\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const target = getBlockInsertionPoint(event, clampedX);\n if (target === null) {\n removeCursor();\n return;\n }\n\n const $pos = editorView.state.doc.resolve(target);\n\n let rect;\n const before = $pos.nodeBefore;\n const after = $pos.nodeAfter;\n\n if (before || after) {\n const nodeDOM = editorView.nodeDOM(target - (before ? before.nodeSize : 0));\n if (nodeDOM && nodeDOM instanceof HTMLElement) {\n const nodeRect = nodeDOM.getBoundingClientRect();\n let top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after) {\n const afterDOM = editorView.nodeDOM(target);\n if (afterDOM && afterDOM instanceof HTMLElement) {\n top = (top + afterDOM.getBoundingClientRect().top) / 2;\n }\n }\n rect = { left: nodeRect.left,\nright: nodeRect.right,\ntop: top - 1,\nbottom: top + 1 };\n }\n }\n\n if (!rect) {\n const coords = editorView.coordsAtPos(target);\n rect = { left: editorRect.left + 50,\nright: editorRect.right - 50,\ntop: coords.top - 1,\nbottom: coords.top + 1 };\n }\n\n const parent = editorView.dom.offsetParent as HTMLElement;\n let parentLeft = 0;\n let parentTop = 0;\n if (parent && parent !== document.body && getComputedStyle(parent).position !== \"static\") {\n const parentRect = parent.getBoundingClientRect();\n parentLeft = parentRect.left - parent.scrollLeft;\n parentTop = parentRect.top - parent.scrollTop;\n }\n\n if (!dropCursorElement!.parentNode) {\n parent.appendChild(dropCursorElement!);\n }\n\n dropCursorElement!.style.left = `${rect.left - parentLeft}px`;\n dropCursorElement!.style.top = `${rect.top - parentTop}px`;\n dropCursorElement!.style.width = `${rect.right - rect.left}px`;\n };\n\n const handleDrop = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault();\n removeCursor();\n editorView.dom.classList.remove(\"dragging\");\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const targetPos = getBlockInsertionPoint(event, clampedX);\n if (targetPos === null) return;\n\n const dragging = (editorView as EditorViewWithDrag).dragging;\n if (dragging && dragging.slice) {\n let tr = editorView.state.tr;\n if (dragging.move) {\n const { node } = dragging;\n if (node) {\n node.replace(tr); // exact native ProseMirror delete\n } else {\n tr = tr.deleteSelection();\n }\n }\n\n const mappedTarget = tr.mapping.map(targetPos);\n const beforeInsert = tr.doc;\n\n const { node, slice } = dragging;\n\n if (node && node.node) {\n let nodeToInsert: import(\"prosemirror-model\").Node | import(\"prosemirror-model\").Fragment = node.node;\n const $mapped = tr.doc.resolve(mappedTarget);\n const parentName = $mapped.parent.type.name;\n\n const isTargetList = parentName === \"bullet_list\" || parentName === \"ordered_list\";\n const isTargetTaskList = parentName === \"taskList\";\n\n // 1. Unwrap incoming lists if they don't match the destination perfectly\n if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"list_item\" && !isTargetList) {\n nodeToInsert = nodeToInsert.content;\n } else if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"taskItem\" && !isTargetTaskList) {\n nodeToInsert = nodeToInsert.content;\n }\n\n // 2. Wrap incoming blocks/fragments into exactly the target list type\n const isFragment = !(\"type\" in nodeToInsert);\n const needsWrap = isFragment || (\"type\" in nodeToInsert && nodeToInsert.type.name !== \"list_item\" && nodeToInsert.type.name !== \"taskItem\");\n\n if (needsWrap) {\n if (isTargetList) {\n const listItemType = editorView.state.schema.nodes.list_item;\n if (listItemType) nodeToInsert = listItemType.create(null, nodeToInsert);\n } else if (isTargetTaskList) {\n const taskItemType = editorView.state.schema.nodes.taskItem;\n if (taskItemType) nodeToInsert = taskItemType.create({ checked: false }, nodeToInsert);\n }\n }\n\n // 3. Force insertion. tr.replace slices and splits lists. tr.insert preserves the explicit boundary.\n try {\n tr = tr.insert(mappedTarget, nodeToInsert);\n } catch (e) {\n console.warn(\"Could not insert dragged node exactly at target. Attempting fallback.\", e);\n const point = dropPoint(tr.doc, mappedTarget, slice);\n if (point !== null) {\n tr = tr.replace(point, point, slice);\n }\n }\n } else if (slice) {\n // For generic slices (e.g native image dragging), we MUST use dropPoint\n // so ProseMirror finds a schema-valid depth to insert the node structure natively.\n const point = dropPoint(tr.doc, mappedTarget, slice);\n const finalTarget = point !== null ? point : mappedTarget;\n tr = tr.replace(finalTarget, finalTarget, slice);\n }\n\n if (!tr.doc.eq(beforeInsert)) {\n editorView.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n editorView.focus();\n }\n }\n\n (editorView as EditorViewWithDrag).dragging = null;\n };\n\n const handleDragEnd = () => {\n removeCursor();\n };\n\n window.addEventListener(\"dragover\", handleDragOver, { capture: true });\n window.addEventListener(\"drop\", handleDrop, { capture: true });\n window.addEventListener(\"dragend\", handleDragEnd, { capture: true });\n\n cleanup = () => {\n removeCursor();\n observer.disconnect();\n window.removeEventListener(\"dragover\", handleDragOver, { capture: true });\n window.removeEventListener(\"drop\", handleDrop, { capture: true });\n window.removeEventListener(\"dragend\", handleDragEnd, { capture: true });\n };\n\n return {\n destroy() {\n if (cleanup) cleanup();\n }\n };\n }\n });\n}\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\nexport interface HighlightRange {\n from: number\n to: number\n}\n\ninterface AutocompleteHighlightState {\n highlight?: HighlightRange\n decorationSet?: DecorationSet\n}\n\nexport const highlightDecorationKey = new PluginKey<AutocompleteHighlightState>(\"highlightDecoration\");\n\nfunction buildDecorationSet(highlight: any, doc: any) {\n const decorations: [any?] = [];\n\n if (highlight) {\n decorations.push(\n Decoration.inline(highlight.from, highlight.to, {\n class: \"dark:bg-surface-accent-700 bg-surface-accent-300\"\n })\n );\n }\n const decorationSet = DecorationSet.create(doc, decorations);\n return decorationSet;\n}\n\n/**\n * Commands to toggle the highlight\n */\nexport const highlightCommands = {\n toggleAutocompleteHighlight: (range?: HighlightRange) => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos,\n type: \"highlightDecoration\",\n remove: false,\n range\n });\n\n dispatch(tr);\n return true;\n },\n\n removeAutocompleteHighlight: () => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos: 0,\n type: \"highlightDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n}\n\n/**\n * This plugin is used to highlight the current autocomplete suggestion.\n * It allows to set a range and remove it.\n */\nexport const highlightDecorationPlugin = (initialHighlight?: HighlightRange) => {\n return new Plugin<AutocompleteHighlightState>({\n key: highlightDecorationKey,\n state: {\n init: (_, { doc }) => {\n const decorationSet = initialHighlight && doc ? buildDecorationSet(initialHighlight, doc) : DecorationSet.empty;\n return {\n decorationSet,\n highlight: initialHighlight\n };\n },\n apply(transaction, oldState) {\n const action = transaction.getMeta(highlightDecorationKey);\n const highlight = action?.range;\n if (action?.type === \"highlightDecoration\") {\n\n const doc = transaction.doc;\n const { remove } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty\n };\n }\n const decorationSet = buildDecorationSet(highlight, doc);\n return {\n decorationSet: decorationSet,\n highlight\n }\n } else {\n return oldState\n }\n }\n },\n props: {\n decorations(state) {\n const autocompleteState = this.getState(state);\n if (autocompleteState?.decorationSet) {\n return autocompleteState.decorationSet\n } else {\n return DecorationSet.empty\n }\n }\n }\n });\n};\n","import {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n InputRule\n} from \"prosemirror-inputrules\";\nimport { schema } from \"../schema\";\nimport { MarkType } from \"prosemirror-model\";\n\nconst blockQuoteRule = wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote);\n\nconst orderedListRule = wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n schema.nodes.ordered_list,\n (match) => ({ order: +match[1] }),\n (match, node) => node.childCount + node.attrs.order === +match[1]\n);\n\nconst bulletListRule = wrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list);\n\nconst taskListRule = wrappingInputRule(/^\\s*(\\[ \\])\\s$/, schema.nodes.task_list);\n\nconst codeBlockRule = textblockTypeInputRule(/^```$/, schema.nodes.code_block);\n\nconst headingRule = textblockTypeInputRule(\n new RegExp(\"^(#{1,6})\\\\s$\"),\n schema.nodes.heading,\n (match) => ({ level: match[1].length })\n);\n\nconst horizontalRuleInputRule = new InputRule(\n /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n (state, match, start, end) => {\n const tr = state.tr;\n tr.replaceWith(start - 1, end, schema.nodes.horizontal_rule.create());\n return tr;\n }\n);\n\nfunction markInputRule(regexp: RegExp, markType: MarkType, getAttrs?: (match: RegExpMatchArray) => Record<string, any>) {\n return new InputRule(regexp, (state, match, start, end) => {\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr;\n if (match[1]) {\n const textStart = start + match[0].indexOf(match[1]);\n const textEnd = textStart + match[1].length;\n if (textEnd < end) tr.delete(textEnd, end);\n if (textStart > start) tr.delete(start, textStart);\n end = start + match[1].length;\n }\n tr.addMark(start, end, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\nconst strongRule = markInputRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, schema.marks.bold);\nconst emRule = markInputRule(/(?:^|[^*_])(?:\\*|_)([^*_]+)(?:\\*|_)$/, schema.marks.italic);\nconst codeRule = markInputRule(/(?:`)([^`]+)(?:`)$/, schema.marks.code);\nconst strikeRule = markInputRule(/(?:~~)([^~]+)(?:~~)$/, schema.marks.strike);\n\nexport const markdownInputRules = inputRules({\n rules: [\n ...smartQuotes,\n ellipsis,\n emDash,\n blockQuoteRule,\n orderedListRule,\n bulletListRule,\n codeBlockRule,\n headingRule,\n taskListRule,\n horizontalRuleInputRule,\n strongRule,\n emRule,\n codeRule,\n strikeRule\n ]\n});\n","import { Plugin, PluginKey } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { Node } from \"prosemirror-model\";\n\nexport const placeholderPluginKey = new PluginKey(\"placeholderPlugin\");\n\nfunction isNodeEmpty(node: Node) {\n const defaultContent = node.type.createAndFill()\n if (!defaultContent) return true\n return node.content.eq(defaultContent.content)\n}\n\nexport function placeholderPlugin(text: string) {\n return new Plugin({\n key: placeholderPluginKey,\n props: {\n decorations: (state) => {\n const doc = state.doc;\n const decorations: Decoration[] = [];\n const isEmptyDoc = doc.childCount === 1 && doc.firstChild?.isTextblock && doc.firstChild.content.size === 0;\n const { anchor } = state.selection;\n\n doc.descendants((node, pos) => {\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n\n if (isEmpty) {\n // Only show placeholder on the node that contains the cursor.\n // For a single-node empty doc, always show it (editor-empty state).\n const nodeEnd = pos + node.nodeSize;\n const hasCursor = anchor >= pos && anchor <= nodeEnd;\n\n if (!hasCursor && !isEmptyDoc) {\n return false;\n }\n\n const classes = [\"is-empty\"];\n if (isEmptyDoc) {\n classes.push(\"is-editor-empty\");\n }\n\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n \"data-placeholder\": text\n })\n );\n }\n return false; // Stop descending\n });\n\n return DecorationSet.create(doc, decorations);\n }\n }\n });\n}\n","import { keymap } from \"prosemirror-keymap\";\nimport { history, undo, redo } from \"prosemirror-history\";\nimport { slashCommandPlugin } from \"./slashCommandPlugin\";\nimport { dragHandlePlugin, globalDragDropPlugin } from \"../extensions/drag-and-drop\";\nimport { baseKeymap, setBlockType, toggleMark, chainCommands, exitCode, joinUp, joinDown, lift, selectParentNode } from \"prosemirror-commands\";\nimport { highlightDecorationPlugin } from \"../extensions/HighlightDecorationExtension\";\nimport { textLoadingDecorationPlugin } from \"../extensions/TextLoadingDecorationExtension\";\nimport { splitListItem, liftListItem, sinkListItem } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { Plugin } from \"prosemirror-state\";\nimport { gapCursor } from \"prosemirror-gapcursor\";\nimport { dropCursor } from \"prosemirror-dropcursor\";\nimport { markdownInputRules } from \"./inputrules\";\nimport { placeholderPlugin } from \"./placeholderPlugin\";\nimport { goToNextCell } from \"prosemirror-tables\";\n\nconst customKeymap = {\n \"Tab\": goToNextCell(1),\n \"Shift-Tab\": goToNextCell(-1),\n \"Mod-z\": undo,\n \"Mod-y\": redo,\n \"Shift-Mod-z\": redo,\n \"Mod-b\": toggleMark(schema.marks.bold),\n \"Mod-i\": toggleMark(schema.marks.italic),\n \"Mod-u\": toggleMark(schema.marks.underline),\n \"Mod-Shift-s\": toggleMark(schema.marks.strike),\n \"Mod-e\": toggleMark(schema.marks.code),\n \"Mod-Shift-h\": toggleMark(schema.marks.highlight),\n\n \"Enter\": splitListItem(schema.nodes.list_item),\n \"Shift-Enter\": splitListItem(schema.nodes.task_item),\n\n \"Mod-[\": liftListItem(schema.nodes.list_item),\n \"Mod-]\": sinkListItem(schema.nodes.list_item),\n\n \"Shift-Mod-8\": setBlockType(schema.nodes.bullet_list),\n \"Shift-Mod-9\": setBlockType(schema.nodes.ordered_list),\n\n \"Mod-Alt-1\": setBlockType(schema.nodes.heading, { level: 1 }),\n \"Mod-Alt-2\": setBlockType(schema.nodes.heading, { level: 2 }),\n \"Mod-Alt-3\": setBlockType(schema.nodes.heading, { level: 3 }),\n\n \"Mod-Alt-0\": setBlockType(schema.nodes.paragraph)\n};\n\nexport const getCorePlugins = (): Plugin[] => [\n history(),\n keymap(customKeymap),\n keymap(baseKeymap),\n globalDragDropPlugin(),\n gapCursor(),\n slashCommandPlugin(),\n dragHandlePlugin(),\n highlightDecorationPlugin(),\n textLoadingDecorationPlugin(),\n markdownInputRules,\n placeholderPlugin(\"Press '/' for commands\")\n];\n","import React, { ReactNode } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\n\nexport interface ReactNodeViewProps {\n node: ProseMirrorNode;\n view: EditorView;\n getPos: () => number | undefined;\n}\n\nexport type ReactNodeViewComponent = React.FC<ReactNodeViewProps>;\n\n/**\n * A utility class that implements the ProseMirror NodeView interface but delegates rendering\n * to a React component.\n * Note: This uses createRoot, so it does not automatically inherit React Contexts.\n * If contexts are needed, wrap them manually or use a portal-based approach instead.\n */\nexport class ReactNodeView implements NodeView {\n public node: ProseMirrorNode;\n public view: EditorView;\n public getPos: () => number | undefined;\n public dom: HTMLElement;\n public contentDOM?: HTMLElement;\n private root: Root;\n private Component: ReactNodeViewComponent;\n\n constructor(\n node: ProseMirrorNode,\n view: EditorView,\n getPos: () => number | undefined,\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n contentDOMElement?: HTMLElement\n ) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n this.Component = Component;\n\n this.dom = document.createElement(as);\n if (className) this.dom.className = className;\n if (contentDOMElement) {\n this.contentDOM = contentDOMElement;\n }\n\n const container = document.createElement(\"div\");\n // We render React next to contentDOM\n this.dom.appendChild(container);\n if (this.contentDOM) {\n this.dom.appendChild(this.contentDOM);\n }\n\n this.root = createRoot(container);\n this.render();\n }\n\n private render() {\n this.root.render(\n <this.Component\n node={this.node}\n view={this.view}\n getPos={this.getPos}\n />\n );\n }\n\n update(node: ProseMirrorNode): boolean {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n this.render();\n return true;\n }\n\n destroy() {\n this.root.unmount();\n }\n\n ignoreMutation(mutation: any) {\n if (!this.contentDOM) {\n return true;\n }\n return !this.contentDOM.contains(mutation.target);\n }\n}\n","import React from \"react\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\n\nexport const TaskItemComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n const checked = node.attrs.checked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const pos = getPos();\n if (typeof pos !== \"number\") return;\n\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n checked: e.target.checked\n })\n );\n };\n\n return (\n <label contentEditable={false} className=\"flex items-start select-none px-1\">\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={handleChange}\n className=\"mt-1 flex-shrink-0 cursor-pointer\"\n />\n </label>\n );\n};\n","import React from \"react\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\nimport { cls, defaultBorderMixin } from \"@rebasepro/ui\";\n\nexport const ImageComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n // If the node is selected\n const selected = view.state.selection.from === getPos();\n\n return (\n <img\n src={node.attrs.src}\n alt={node.attrs.alt || \"\"}\n title={node.attrs.title || \"\"}\n className={cls(\n \"rounded-lg max-w-full !m-0\",\n selected ? \"\" : \"\"\n )}\n />\n );\n};\n","import { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\nimport { ReactNodeView, ReactNodeViewComponent } from \"./ReactNodeView\";\nimport { TaskItemComponent } from \"./TaskItemComponent\";\nimport { ImageComponent } from \"./ImageComponent\";\n\nfunction createReactNodeView(\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n createContentDOM?: () => HTMLElement\n) {\n return (node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined): NodeView => {\n const contentDOM = createContentDOM ? createContentDOM() : undefined;\n return new ReactNodeView(node, view, getPos, Component, as, className, contentDOM);\n };\n}\n\nexport const nodeViews = {\n task_item: createReactNodeView(\n TaskItemComponent,\n \"li\",\n \"flex items-start\",\n () => {\n const dom = document.createElement(\"div\");\n dom.className = \"flex-grow min-w-0\";\n return dom;\n }\n ),\n image: createReactNodeView(\n ImageComponent,\n \"span\",\n \"inline-block w-full\"\n )\n};\n","import { useState, useEffect, useRef, useLayoutEffect } from \"react\";\nimport { EditorState, Transaction, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { schema } from \"../schema\";\nimport { getCorePlugins } from \"../plugins\";\nimport { parser } from \"../markdown\";\nimport { nodeViews } from \"../nodeViews\";\nimport { createDropImagePlugin } from \"../extensions/Image\";\nimport { columnResizing, tableEditing } from \"prosemirror-tables\";\n\nconst trailingNodePlugin = new Plugin({\n appendTransaction: (_, oldState, newState) => {\n const doc = newState.doc;\n if (doc.lastChild && doc.lastChild.type.name !== \"paragraph\") {\n return newState.tr.insert(doc.content.size, newState.schema.nodes.paragraph.create());\n }\n return null;\n }\n});\n\ninterface UseProseMirrorProps {\n initialContent?: string | any;\n editable?: boolean;\n handleImageUpload?: (file: File) => Promise<string>;\n}\n\nexport function useProseMirror({ initialContent, editable = true, handleImageUpload }: UseProseMirrorProps) {\n const plugins = [\n ...getCorePlugins(),\n columnResizing(),\n tableEditing(),\n trailingNodePlugin\n ];\n if (handleImageUpload) {\n plugins.push(createDropImagePlugin(handleImageUpload));\n }\n\n const defaultState = EditorState.create({\n doc: typeof initialContent === \"string\"\n ? parser.parse(initialContent)\n : initialContent\n ? schema.nodeFromJSON(initialContent)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]),\n schema,\n plugins\n });\n\n const [state, setState] = useState<EditorState>(defaultState);\n const [view, setView] = useState<EditorView | null>(null);\n\n const editorRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n\n useLayoutEffect(() => {\n if (!editorRef.current) return;\n\n const editorView = new EditorView(editorRef.current, {\n state: defaultState,\n editable: () => editable,\n dispatchTransaction: (tr: Transaction) => {\n const newState = editorView.state.apply(tr);\n editorView.updateState(newState);\n setState(newState);\n },\n nodeViews: nodeViews,\n transformPastedHTML(html: string) {\n // Strip inline styles and classes from pasted HTML so we don't\n // get textStyle marks (color, font-size, etc.) that have no\n // markdown representation. This makes paste look consistent.\n const div = document.createElement(\"div\");\n div.innerHTML = html;\n div.querySelectorAll(\"*\").forEach((el) => {\n el.removeAttribute(\"style\");\n el.removeAttribute(\"class\");\n el.removeAttribute(\"color\");\n el.removeAttribute(\"bgcolor\");\n el.removeAttribute(\"face\");\n });\n return div.innerHTML;\n }\n });\n\n // Patch posAtCoords to allow dropping/interacting anywhere horizontally natively\n const originalPosAtCoords = editorView.posAtCoords.bind(editorView);\n editorView.posAtCoords = (coords: { left: number, top: number }) => {\n const res = originalPosAtCoords(coords);\n if (!res) {\n const editorRect = editorView.dom.getBoundingClientRect();\n // If it's literally anywhere to the left of the actual ProseMirror content block\n if (coords.left <= editorRect.left) {\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n // Or if it's anywhere to the right\n if (coords.left >= editorRect.right) {\n const probeX = editorRect.right - Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n }\n return res;\n };\n\n viewRef.current = editorView;\n setView(editorView);\n\n return () => {\n editorView.destroy();\n viewRef.current = null;\n };\n }, []);\n\n // Effect to update editable status without re-mounting\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.setProps({ editable: () => editable });\n }\n }, [editable]);\n\n return {\n state,\n view,\n editorRef\n };\n}\n","\"use client\";\nimport React, { useEffect, useState, useRef, useMemo } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { cls, defaultBorderMixin, Separator, useInjectStyles, TextareaAutosize } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { EditorBubble, ImageBubble, SlashCommandMenu, TableBubble, type JSONContent } from \"./components\";\nimport { NodeSelector } from \"./selectors/node-selector\";\nimport { LinkSelector } from \"./selectors/link-selector\";\nimport { TextButtons } from \"./selectors/text-buttons\";\nimport { removeClassesFromJson } from \"./utils/remove_classes\";\nimport { parser, serializer } from \"./markdown\";\nimport { EditorAIController } from \"./types\";\nimport { useProseMirror } from \"./hooks/useProseMirror\";\nimport { ProseMirrorContext } from \"./hooks/useProseMirrorContext\";\nimport { highlightCommands } from \"./extensions/HighlightDecorationExtension\";\nimport { schema } from \"./schema\";\n\nexport type CustomEditorComponent = {\n name: string,\n component: React.FC\n};\n\nexport interface MarkdownEditorConfig {\n html?: boolean;\n transformPastedText?: boolean;\n}\n\nexport type RebaseEditorTextSize = \"sm\" | \"base\" | \"lg\";\n\nexport type RebaseEditorProps = {\n content?: JSONContent | string,\n onMarkdownContentChange?: (content: string) => void,\n onJsonContentChange?: (content: JSONContent | null) => void,\n onHtmlContentChange?: (content: string) => void,\n handleImageUpload: (file: File) => Promise<string>,\n version?: number,\n textSize?: RebaseEditorTextSize,\n highlight?: { from: number, to: number },\n aiController?: EditorAIController,\n customComponents?: CustomEditorComponent[];\n disabled?: boolean;\n markdownConfig?: MarkdownEditorConfig;\n};\n\nconst proseClasses = {\n \"sm\": \"prose-sm\",\n \"base\": \"prose-base\",\n \"lg\": \"prose-lg\"\n}\n\nexport const RebaseEditor = ({\n content,\n onJsonContentChange,\n onHtmlContentChange,\n onMarkdownContentChange,\n version,\n textSize = \"base\",\n highlight,\n handleImageUpload,\n aiController,\n disabled,\n markdownConfig\n}: RebaseEditorProps) => {\n const { t } = useTranslation();\n\n const [openNode, setOpenNode] = useState(false);\n const [openLink, setOpenLink] = useState(false);\n\n const [isMarkdownMode, setIsMarkdownMode] = useState(false);\n const [internalMarkdown, setInternalMarkdown] = useState<string>(\"\");\n\n useEffect(() => {\n if (!isMarkdownMode) return;\n const timeout = setTimeout(() => {\n if (callbacksRef.current.onMarkdownContentChange) {\n callbacksRef.current.onMarkdownContentChange(internalMarkdown);\n }\n }, 250);\n return () => clearTimeout(timeout);\n }, [internalMarkdown, isMarkdownMode]);\n\n const handleToggleMarkdown = () => {\n if (!isMarkdownMode) {\n if (view) {\n setInternalMarkdown(serializer.serialize(view.state.doc));\n }\n setIsMarkdownMode(true);\n } else {\n if (view) {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n }\n setIsMarkdownMode(false);\n }\n };\n\n const handleMarkdownChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInternalMarkdown(e.target.value);\n };\n\n const handleMarkdownBlur = () => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n onMarkdownContentChange(internalMarkdown);\n }\n if (onJsonContentChange) {\n try {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n onJsonContentChange(removeClassesFromJson(newDoc.toJSON()) as JSONContent);\n }\n } catch (e) {\n console.warn(\"Could not parse markdown to JSON\", e);\n }\n }\n };\n\n useInjectStyles(\"Editor\", cssStyles);\n\n const callbacksRef = useRef({ onMarkdownContentChange,\nonJsonContentChange });\n useEffect(() => {\n callbacksRef.current = { onMarkdownContentChange,\nonJsonContentChange };\n }, [onMarkdownContentChange, onJsonContentChange]);\n\n const flushChanges = (currentState: EditorState) => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n try {\n const markdown = serializer.serialize(currentState.doc);\n onMarkdownContentChange(markdown);\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not serialize editor state to markdown:\", e);\n }\n }\n if (onJsonContentChange) {\n const jsonContent = removeClassesFromJson(currentState.doc.toJSON()) as JSONContent;\n onJsonContentChange(jsonContent);\n }\n };\n\n const { state, view, editorRef } = useProseMirror({\n initialContent: content,\n editable: !disabled,\n handleImageUpload\n });\n\n // When `version` changes externally (e.g. form discard/reset), re-parse the\n // `content` prop and replace the ProseMirror document so the editor reflects\n // the reverted value.\n const versionRef = useRef(version);\n useEffect(() => {\n if (versionRef.current === version) return; // skip initial render\n versionRef.current = version;\n if (!view) return;\n try {\n const newDoc = typeof content === \"string\"\n ? parser.parse(content ?? \"\")\n : content\n ? schema.nodeFromJSON(content)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not reset editor content:\", e);\n }\n // Also reset raw-markdown textarea if the user is in source mode\n if (isMarkdownMode) {\n setInternalMarkdown(typeof content === \"string\" ? content : \"\");\n }\n // Reset the settling window so the replacement dispatch above is NOT\n // treated as a user edit (which would fire onChange back to the form).\n mountTimeRef.current = Date.now();\n hasUserEditedRef.current = false;\n }, [version]);\n\n const doc = state?.doc;\n // Use a time-based settling window instead of a single-skip flag.\n // The trailingNodePlugin fires appendTransaction on mount (adding a trailing\n // paragraph), which creates a second doc change after the initial parse.\n // A single-skip flag misses that second change. Instead, we skip ALL doc\n // changes within the first 500ms after the view is created.\n const mountTimeRef = useRef(Date.now());\n const hasUserEditedRef = useRef(false);\n useEffect(() => {\n if (!state) return;\n // Skip all doc changes during the initial settling window (500ms).\n // This covers both the initial parse AND the trailingNodePlugin's\n // appendTransaction that adds a trailing paragraph.\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500 && !hasUserEditedRef.current) {\n return;\n }\n hasUserEditedRef.current = true;\n const timeout = setTimeout(() => {\n flushChanges(state);\n }, 250);\n return () => clearTimeout(timeout);\n }, [doc]);\n\n useEffect(() => {\n if (!view) return;\n const dom = view.dom;\n const handleBlur = () => {\n // Don't flush during the initial settling window — the editor\n // hasn't been interacted with yet, and the serialized output\n // may differ from the input due to parse→serialize normalization.\n if (!hasUserEditedRef.current) {\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500) return;\n }\n flushChanges(view.state);\n };\n dom.addEventListener(\"blur\", handleBlur);\n return () => dom.removeEventListener(\"blur\", handleBlur);\n }, [view]);\n\n\n useEffect(() => {\n if (view) {\n if (highlight) {\n highlightCommands.toggleAutocompleteHighlight(highlight)(view.state, view.dispatch);\n } else {\n highlightCommands.removeAutocompleteHighlight()(view.state, view.dispatch);\n }\n }\n }, [highlight?.from, highlight?.to]);\n\n const proseClass = proseClasses[textSize];\n\n\n return (\n <div className=\"relative min-h-[200px] w-full\">\n <button\n type=\"button\"\n onClick={handleToggleMarkdown}\n title={isMarkdownMode ? \"Switch to Visual Editor\" : \"Switch to Markdown\"}\n className=\"absolute top-2 right-2 z-10 px-2 py-1 text-xs font-medium text-surface-400 hover:text-surface-700 dark:text-surface-600 dark:hover:text-surface-300 transition-colors opacity-50 hover:opacity-100 bg-transparent rounded\"\n >\n {isMarkdownMode ? \"Visual\" : \"Markdown\"}\n </button>\n\n <ProseMirrorContext.Provider value={useMemo(() => ({ state,\nview }), [state, view])}>\n\n <div style={{ display: isMarkdownMode ? \"none\" : \"block\" }}>\n <div\n ref={editorRef}\n className={cls(\"relative prose dark:prose-invert\", proseClass, \"prose-headings:font-title prose-headings:font-normal prose-strong:font-semibold prose-code:font-normal prose-blockquote:font-normal prose-a:font-normal font-default focus:outline-none max-w-full px-12 py-4\")}\n />\n\n {view && (\n <>\n <EditorBubble\n options={{\n placement: \"top\",\n offset: 6\n }}\n className={cls(\"flex w-fit max-w-[90vw] h-10 overflow-hidden rounded border bg-white dark:bg-surface-800 shadow\", defaultBorderMixin)}\n >\n <NodeSelector portalContainer={editorRef.current} open={openNode} onOpenChange={setOpenNode}/>\n <Separator orientation=\"vertical\"/>\n <LinkSelector open={openLink} onOpenChange={setOpenLink}/>\n <Separator orientation=\"vertical\"/>\n <TextButtons/>\n </EditorBubble>\n\n <ImageBubble\n options={{\n placement: \"bottom\",\n offset: 6\n }}\n />\n <TableBubble/>\n </>\n )}\n\n <SlashCommandMenu upload={handleImageUpload} aiController={aiController}/>\n </div>\n\n {isMarkdownMode && (\n <TextareaAutosize\n value={internalMarkdown}\n onChange={handleMarkdownChange}\n onBlur={handleMarkdownBlur}\n className={cls(\n \"w-full h-full min-h-[200px] px-12 py-4 bg-transparent resize-none font-mono focus:ring-0\",\n proseClass\n )}\n style={{\n tabSize: 4,\n outline: \"none\",\n border: \"none\",\n boxShadow: \"none\"\n }}\n />\n )}\n\n </ProseMirrorContext.Provider>\n </div>\n );\n};\n\n\nconst cssStyles = `\n.ProseMirror {\n box-shadow: none !important;\n}\n.ProseMirror .is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n.ProseMirror .is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n\n[data-theme=\"dark\"] {\n .ProseMirror .is-empty::before {\n color: rgb(100 116 139); //500\n }\n}\n\n.is-empty {\n cursor: text;\n color: rgb(100 116 139); //500\n}\n\n.ProseMirror img {\n transition: filter 0.1s ease-in-out;\n}\n.ProseMirror img:hover {\n cursor: pointer;\n filter: brightness(90%);\n}\n.ProseMirror img.ProseMirror-selectednode {\n filter: brightness(90%);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n\nul[data-type=\"taskList\"] li > label {\n margin-right: 0.2rem;\n user-select: none;\n}\n@media screen and (max-width: 768px) {\n ul[data-type=\"taskList\"] li > label {\n margin-right: 0.5rem;\n }\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n background-color: rgb(30 41 59);\n border: 2px solid #666;\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(71 85 105); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n -webkit-appearance: none;\n appearance: none;\n background-color: white;\n margin: 0;\n cursor: pointer;\n width: 1.2em;\n height: 1.2em;\n position: relative;\n top: 5px;\n border: 2px solid #777;\n border-radius: 0.25em;\n margin-right: 0.3rem;\n display: grid;\n place-content: center;\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(241 245 249); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(226 232 240); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]::before {\n content: \"\";\n width: 0.65em;\n height: 0.65em;\n transform: scale(0);\n transition: 120ms transform ease-in-out;\n box-shadow: inset 1em 1em;\n transform-origin: center;\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:checked::before { transform: scale(1); }\n\n[data-theme=\"dark\"] {\n ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(226 232 240);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n }\n}\nul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(51 65 85);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n}\n.tippy-box { max-width: 400px !important; }\n\n.ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(219 234 254);\n transition: background-color 0.2s;\n box-shadow: none;\n}\n[data-theme=\"dark\"] .ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(51 65 85);\n}\n.prose-base table p { margin: 0; }\n\n.drag-handle {\n position: absolute;\n opacity: 1;\n transition: opacity ease-in 0.2s;\n border-radius: 0.25rem;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(128, 128, 128, 0.9)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7,8.44771525 7,9 7,9 C7,9.55228475 7,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E\");\n background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);\n background-repeat: no-repeat;\n background-position: center;\n width: 1.2rem;\n height: 1.5rem;\n z-index: 100;\n cursor: grab;\n}\n.drag-handle::before {\n content: '';\n position: absolute;\n top: -10px;\n bottom: -10px;\n left: -20px; \n right: 0px;\n z-index: -1;\n}\n.drag-handle:hover { background-color: rgb(241 245 249); transition: background-color 0.2s; }\n.drag-handle:active { background-color: rgb(226 232 240); transition: background-color 0.2s; }\n.drag-handle.hide { opacity: 0; pointer-events: none; }\n@media screen and (max-width: 600px) { .drag-handle { display: none; pointer-events: none; } }\n[data-theme=\"dark\"] .drag-handle:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] .drag-handle:active { background-color: rgb(51 65 85); }\n.prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-600);\n}\n[data-theme=\"dark\"] .prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-300);\n}\n\n.ProseMirror table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n width: 100%;\n margin: 1em 0;\n overflow: hidden;\n border-radius: 0.375rem;\n border: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror table {\n border-color: #374151;\n}\n\n.ProseMirror td, .ProseMirror th {\n min-width: 1em;\n padding: 8px 10px;\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n border-right: 1px solid #e5e7eb;\n border-bottom: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror td, [data-theme=\"dark\"] .ProseMirror th {\n border-right-color: #374151;\n border-bottom-color: #374151;\n}\n\n.ProseMirror tr:last-child td, .ProseMirror tr:last-child th {\n border-bottom: none;\n}\n.ProseMirror th:last-child, .ProseMirror td:last-child {\n border-right: none;\n}\n\n.ProseMirror td {\n background-color: transparent;\n}\n\n.ProseMirror th {\n font-weight: 600;\n text-align: left;\n background-color: #f3f4f6;\n color: #374151;\n}\n[data-theme=\"dark\"] .ProseMirror td {\n background-color: transparent;\n}\n[data-theme=\"dark\"] .ProseMirror th {\n background-color: rgba(255, 255, 255, 0.05);\n color: #d1d5db;\n}\n`;\n"],"names":["ProseMirrorContext","createContext","state","view","useProseMirrorContext","useContext","EditorBubble","forwardRef","t0","ref","$","_c","children","options","className","menuRef","useRef","show","setShow","useState","t1","t2","timer","setTimeout","selection","empty","isImage","doc","nodesBetween","from","to","node","type","name","NodeSelection","clearTimeout","useEffect","t3","offset","placement","current","start","coordsAtPos","end","virtualEl","getBoundingClientRect","top","Math","min","bottom","max","left","right","width","height","x","y","cleanup","autoUpdate","t4","computePosition","middleware","flip","shift","strategy","then","t5","Object","assign","style","visibility","Symbol","for","position","zIndex","t6","_temp","displayName","e_0","e","preventDefault","EditorBubbleItem","asChild","onSelect","rest","Comp","Slot","SlashCommandPluginKey","PluginKey","slashCommandPlugin","Plugin","key","init","active","apply","tr","value","oldState","newState","meta","getMeta","undefined","TextSelection","$anchor","parent","textBefore","textBetween","parentOffset","match","dismissed","query","pos","length","range","onFileRead","readerEvent","upload","image","schema","plugin","plugins","find","p","ImagePluginKey","console","error","decoId","random","toString","substring","placeholder","document","createElement","imageElement","setAttribute","defaultBorderMixin","src","target","result","appendChild","deco","Decoration","widget","id","decorationSet","getState","add","dispatch","setMeta","debug","replacePlaceholder","currentDecos","foundDecos","spec","warn","currentPos","imageNode","nodes","create","replaceWith","remove","preloader","Image","onload","onerror","createDropImagePlugin","DecorationSet","old","map","mapping","props","handleDOMEvents","dragover","event","dataTransfer","types","includes","drop","files","Array","images","filter","file","test","forEach","posAtCoords","clientX","clientY","reader","FileReader","readAsDataURL","handlePaste","html","clipboardData","getData","items","anyImageFound","item","startsWith","getAsFile","decorations","loadingDecorationKey","textLoadingCommands","toggleLoadingDecoration","loadingHtml","removeLoadingDecoration","textLoadingDecorationPlugin","hasDecoration","action","decoration","container","innerHTML","span","innerText","suggestionItems","title","description","searchTerms","icon","iconSize","small","command","deleteRange","setBlockType","paragraph","wrapInList","task_list","heading","level","bullet_list","ordered_list","wrapIn","blockquote","code_block","input","accept","onchange","f","click","aiController","setSubView","autocompleteSuggestionItem","Error","textBeforeCursor","textAfterCursor","content","size","buffer","autocomplete","delta","unescapedResult","replace","isHTML","parsedDoc","div","DOMParser","fromSchema","parse","parser","insertText","SlashCommandMenu","selectedIndex","setSelectedIndex","subView","tableGridCoords","setTableGridCoords","r","c","pluginState","isActive","filteredItems","React","useMemo","availableItems","push","inTitle","toLowerCase","some","term","handleKeyDown","stopPropagation","stopImmediatePropagation","prev","tableNode","createTableNode","setSelection","focus","window","addEventListener","capture","removeEventListener","itemRefs","scrollIntoView","block","cls","rows","cols","index","el","rowsCount","colsCount","cells","isHeader","cellType","table_header","table_cell","cell","createAndFill","row","table_row","Fragment","table","TableGridPicker","hoveredRow","hoveredCol","onHover","_","__0","ImageBubble","t","useTranslation","alt","setAlt","setTitle","imagePos","setImagePos","handleContextMenu","posInfo","inside","nodeAt","attrs","dom","handleMousedown","contains","button","newAlt","newTitle","node_0","tr_0","setNodeMarkup","handleSave","t7","t8","t9","e_3","t10","t11","t12","e_4","t13","t14","e_2","currentTarget","isSelectionInTable","$from","d","depth","TableBubble","isDestroyed","cmd","executeCommand","addRowBefore","t15","addRowAfter","t16","t17","t18","t19","t20","deleteRow","t21","t22","t23","t24","t25","t26","addColumnBefore","t27","t28","t29","t30","t31","addColumnAfter","t32","t33","t34","t35","t36","deleteColumn","t37","t38","t39","t40","t41","t42","deleteTable","t43","t44","t45","t46","isMarkActive","isInSet","storedMarks","marks","rangeHasMark","isNodeActive","keys","every","getMarkAttributes","mark","found","m","setMark","$cursor","ranges","addStoredMark","i","$to","addMark","unsetMark","markStart","markEnd","currentMarkStart","child","childStart","childEnd","nodeSize","removeMark","removeStoredMark","labelKey","TypeIcon","Heading1Icon","Heading2Icon","Heading3Icon","CheckSquareIcon","task_item","ListIcon","ListOrderedIcon","QuoteIcon","CodeIcon","NodeSelector","open","onOpenChange","portalContainer","T0","T1","activeItem","pop","Popover","Button","item_0","smallest","isValidUrl","url","URL","getUrlFromString","str","LinkSelector","inputRef","link","href","handleSubmit","handleRemoveLink","focusedDisabled","TextButtons","_temp2","BoldIcon","_temp3","_temp4","ItalicIcon","_temp5","_temp6","UnderlineIcon","_temp7","_temp8","StrikethroughIcon","_temp9","_temp0","s","bold","s_0","toggleMark","s_1","italic","s_2","dispatch_0","s_3","underline","s_4","dispatch_1","s_5","strike","s_6","dispatch_2","s_7","code","s_8","dispatch_3","removeClassesFromJson","jsonObj","isArray","class","serializeForClipboard","slice","someProp","context","openStart","openEnd","childCount","firstChild","defaultAttrs","serializer","DOMSerializer","detachedDoc","wrap","serializeFragment","needsWrap","wrappers","nodeType","wrapMap","nodeName","wrapper","JSON","stringify","text","thead","tbody","tfoot","caption","colgroup","col","td","th","_detachedDoc","implementation","createHTMLDocument","absoluteRect","element","data","ancestor","parentElement","getComputedStyle","ancestorRect","nodeDOMAtCoords","coords","editorRect","blockSelector","elem","elementFromPoint","closest","textContent","trim","li","probeX","probeElem","probeBlock","nodePosAtDOM","posAtDOM","$pos","resolve","before","dragHandlePlugin","dragHandleWidth","handleDragStart","Element","nodePos","draggedNodeSelection","clearData","setData","effectAllowed","setDragImage","dragging","move","handleClick","classList","dragHandleElement","hideDragHandle","opacity","pointerEvents","showDragHandle","draggable","dataset","dragHandle","onMouseMove","editable","compStyle","lineHeight","parseInt","paddingTop","rect","matches","destroy","keydown","mousewheel","dragstart","dragend","globalDragDropPlugin","dropCursorElement","updateDropCursorColor","isDark","documentElement","getAttribute","varName","color","getPropertyValue","backgroundColor","editorView","cssText","observer","MutationObserver","observe","attributes","attributeFilter","removeCursor","parentNode","removeChild","getBlockInsertionPoint","clampedX","blockDepth","isBlock","nodeBeforePos","nodeAfterPos","after","domNode","nodeDOM","HTMLElement","isTopHalf","handleDragOver","nodeBefore","nodeAfter","nodeRect","afterDOM","offsetParent","parentLeft","parentTop","body","parentRect","scrollLeft","scrollTop","handleDrop","targetPos","deleteSelection","mappedTarget","beforeInsert","nodeToInsert","$mapped","parentName","isTargetList","isTargetTaskList","isFragment","listItemType","list_item","taskItemType","taskItem","checked","insert","point","dropPoint","finalTarget","eq","handleDragEnd","disconnect","highlightDecorationKey","buildDecorationSet","highlight","inline","highlightCommands","toggleAutocompleteHighlight","removeAutocompleteHighlight","highlightDecorationPlugin","initialHighlight","transaction","autocompleteState","blockQuoteRule","wrappingInputRule","orderedListRule","order","bulletListRule","taskListRule","codeBlockRule","textblockTypeInputRule","headingRule","RegExp","horizontalRuleInputRule","InputRule","horizontal_rule","markInputRule","regexp","markType","getAttrs","Function","textStart","indexOf","textEnd","delete","strongRule","emRule","codeRule","strikeRule","markdownInputRules","inputRules","rules","smartQuotes","ellipsis","emDash","placeholderPluginKey","isNodeEmpty","defaultContent","placeholderPlugin","isEmptyDoc","isTextblock","anchor","descendants","isEmpty","isLeaf","nodeEnd","hasCursor","classes","join","customKeymap","goToNextCell","undo","redo","splitListItem","liftListItem","sinkListItem","getCorePlugins","history","keymap","baseKeymap","gapCursor","ReactNodeView","getPos","contentDOM","root","Component","constructor","as","contentDOMElement","createRoot","render","update","unmount","ignoreMutation","mutation","TaskItemComponent","handleChange","ImageComponent","selected","createReactNodeView","createContentDOM","nodeViews","trailingNodePlugin","appendTransaction","lastChild","useProseMirror","initialContent","handleImageUpload","columnResizing","tableEditing","EditorState","nodeFromJSON","defaultState","setState","setView","editorRef","viewRef","EditorView","dispatchTransaction","updateState","transformPastedHTML","querySelectorAll","originalPosAtCoords","bind","res","probeX_0","useLayoutEffect","setProps","removeAttribute","proseClasses","RebaseEditor","onJsonContentChange","onHtmlContentChange","onMarkdownContentChange","version","textSize","disabled","markdownConfig","openNode","setOpenNode","openLink","setOpenLink","isMarkdownMode","setIsMarkdownMode","internalMarkdown","setInternalMarkdown","timeout","callbacksRef","handleToggleMarkdown","serialize","newDoc","handleMarkdownChange","handleMarkdownBlur","toJSON","useInjectStyles","cssStyles","flushChanges","currentState","markdown","jsonContent","versionRef","mountTimeRef","Date","now","hasUserEditedRef","elapsed","handleBlur","proseClass","display","tabSize","outline","border","boxShadow"],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sources":["../src/editor/hooks/useProseMirrorContext.ts","../src/editor/components/editor-bubble.tsx","../src/editor/components/editor-bubble-item.tsx","../src/editor/plugins/slashCommandPlugin.ts","../src/editor/extensions/Image.ts","../src/editor/extensions/TextLoadingDecorationExtension.tsx","../src/editor/components/SlashCommandMenu.tsx","../src/editor/components/image-bubble.tsx","../src/editor/components/table-bubble.tsx","../src/editor/utils/prosemirror-utils.ts","../src/editor/selectors/node-selector.tsx","../src/editor/selectors/link-selector.tsx","../src/editor/selectors/text-buttons.tsx","../src/editor/utils/remove_classes.ts","../src/editor/extensions/clipboard.ts","../src/editor/extensions/drag-and-drop.tsx","../src/editor/extensions/HighlightDecorationExtension.ts","../src/editor/plugins/inputrules.ts","../src/editor/plugins/placeholderPlugin.ts","../src/editor/plugins/index.ts","../src/editor/nodeViews/ReactNodeView.tsx","../src/editor/nodeViews/TaskItemComponent.tsx","../src/editor/nodeViews/ImageComponent.tsx","../src/editor/nodeViews/index.ts","../src/editor/hooks/useProseMirror.ts","../src/editor/editor.tsx"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\n\nexport interface ProseMirrorContextType {\n state: EditorState | null;\n view: EditorView | null;\n}\n\nexport const ProseMirrorContext = createContext<ProseMirrorContextType>({\n state: null,\n view: null\n});\n\nexport const useProseMirrorContext = () => useContext(ProseMirrorContext);\n","import { forwardRef, type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport {\n autoUpdate,\n computePosition,\n flip,\n offset,\n shift,\n type VirtualElement,\n type Placement\n} from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\n\nexport interface EditorBubbleProps {\n children: ReactNode;\n options?: { placement?: Placement; offset?: number };\n className?: string;\n}\n\nexport const EditorBubble = forwardRef<HTMLDivElement, EditorBubbleProps>(\n ({\n children,\n options,\n className\n }, ref) => {\n const {\n view,\n state\n } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!view || !state) return;\n\n // Delay evaluation slightly to let selection settle\n const timer = setTimeout(() => {\n const { selection } = state;\n const { empty } = selection;\n\n // check if image is selected\n let isImage = false;\n state.doc.nodesBetween(selection.from, selection.to, (node) => {\n if (node.type.name === \"image\") isImage = true;\n });\n\n if (isImage || empty || selection instanceof NodeSelection) {\n setShow(false);\n return;\n }\n\n setShow(true);\n }, 0);\n\n return () => clearTimeout(timer);\n }, [view, state]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const {\n from,\n to\n } = state.selection;\n\n // Fallback for end selection coords\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n\n // Recompute coords in case of scroll\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore error if selection is out of bounds\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({\n x,\n y\n }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n className={className}\n style={{\n position: \"fixed\",\n zIndex: 9999,\n visibility: \"hidden\"\n }}\n onMouseDown={(e) => {\n e.preventDefault(); // Don't lose focus inside ProseMirror\n }}\n >\n {children}\n </div>\n );\n }\n);\n\nEditorBubble.displayName = \"EditorBubble\";\n\nexport default EditorBubble;\n","import { type ComponentPropsWithoutRef, type ReactNode, forwardRef } from \"react\";\nimport { Slot } from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\n\ninterface EditorBubbleItemProps {\n children: ReactNode;\n asChild?: boolean;\n onSelect?: () => void;\n}\n\nexport const EditorBubbleItem = forwardRef<\n HTMLDivElement,\n EditorBubbleItemProps & Omit<ComponentPropsWithoutRef<\"div\">, \"onSelect\">\n>(({ children, asChild, onSelect, ...rest }, ref) => {\n const { view } = useProseMirrorContext();\n const Comp = asChild ? Slot : \"div\";\n\n if (!view) return null;\n\n return (\n <Comp ref={ref} {...rest} onMouseDown={(e: React.MouseEvent) => {\n // Prevent default to avoid losing focus\n e.preventDefault();\n }} onClick={() => onSelect?.()}>\n {children}\n </Comp>\n );\n});\n\nEditorBubbleItem.displayName = \"EditorBubbleItem\";\n\nexport default EditorBubbleItem;\n","import { Plugin, PluginKey, TextSelection } from \"prosemirror-state\";\n\nexport const SlashCommandPluginKey = new PluginKey(\"slash-command\");\n\nexport interface SlashCommandState {\n active: boolean;\n range?: { from: number; to: number };\n query?: string;\n dismissed?: boolean;\n}\n\nexport function slashCommandPlugin() {\n return new Plugin({\n key: SlashCommandPluginKey,\n state: {\n init(): SlashCommandState {\n return { active: false };\n },\n apply(tr, value, oldState, newState): SlashCommandState {\n const meta = tr.getMeta(SlashCommandPluginKey);\n if (meta !== undefined) {\n return meta;\n }\n\n const { selection } = newState;\n if (!(selection instanceof TextSelection) || !selection.empty) {\n return { active: false };\n }\n\n // Make sure we are in a paragraph or heading block, not a code_block for example\n const $anchor = selection.$anchor;\n if ($anchor.parent.type.name === \"code_block\") {\n return { active: false };\n }\n\n const textBefore = $anchor.parent.textBetween(\n Math.max(0, $anchor.parentOffset - 20),\n $anchor.parentOffset,\n undefined,\n \"\\ufffc\"\n );\n const match = textBefore.match(/(?:\\s|^)(\\/)([a-zA-Z0-9]*)$/);\n\n if (!match) {\n return { active: false };\n }\n\n // If the user previously dismissed this slash command, keep it dismissed\n if (value.dismissed) {\n return { active: false,\ndismissed: true };\n }\n\n // match[1] is the slash, match[2] is the query\n const query = match[2];\n const from = $anchor.pos - query.length - 1;\n const to = $anchor.pos;\n return { active: true,\nrange: { from,\nto },\nquery };\n }\n }\n });\n}\n","import { cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { Decoration, DecorationSet, EditorView } from \"prosemirror-view\";\nimport { Plugin, PluginKey } from \"prosemirror-state\";\n\nexport type UploadFn = (image: File) => Promise<string>;\n\nexport async function onFileRead(view: EditorView, readerEvent: ProgressEvent<FileReader>, pos: number, upload: UploadFn, image: File) {\n\n const { schema } = view.state;\n\n // @ts-ignore\n const plugin = view.state.plugins.find((p: Plugin) => p.key === ImagePluginKey.key);\n if (!plugin) {\n console.error(\"Image plugin not found\");\n return;\n }\n\n const decoId = Math.random().toString(36).substring(7);\n const placeholder = document.createElement(\"div\");\n const imageElement = document.createElement(\"img\");\n imageElement.setAttribute(\"class\", \"opacity-40 rounded-lg border \" + defaultBorderMixin);\n imageElement.src = readerEvent.target?.result as string;\n placeholder.appendChild(imageElement);\n\n const deco = Decoration.widget(pos, placeholder, { id: decoId });\n let decorationSet = plugin.getState(view.state);\n decorationSet = decorationSet?.add(view.state.doc, [deco]);\n view.dispatch(view.state.tr.setMeta(plugin, { decorationSet }));\n\n // Image Upload Logic\n const src = await upload(image);\n console.debug(\"Uploaded image\", src);\n\n const replacePlaceholder = () => {\n // Retrieve the LATEST state after the async upload\n let currentDecos = plugin.getState(view.state) as DecorationSet;\n const foundDecos = currentDecos.find(undefined, undefined, spec => spec.id === decoId);\n\n if (foundDecos.length === 0) {\n console.warn(\"Image placeholder removed before upload completed.\");\n return;\n }\n\n // Get the mapped position of the decoration\n const currentPos = foundDecos[0].from;\n\n // Replace placeholder with actual image at the correct mapped position\n const imageNode = view.state.schema.nodes.image.create({ src });\n const tr = view.state.tr.replaceWith(currentPos, currentPos, imageNode);\n\n // Remove placeholder decoration using the LATEST decorationSet\n currentDecos = currentDecos.remove(foundDecos);\n tr.setMeta(plugin, { decorationSet: currentDecos });\n view.dispatch(tr);\n };\n\n // Preload the image so it doesn't cause a layout shift when replacing the placeholder\n const preloader = new Image();\n preloader.src = src;\n preloader.onload = replacePlaceholder;\n preloader.onerror = replacePlaceholder;\n}\n\nexport const ImagePluginKey = new PluginKey(\"imagePlugin\");\n\nexport const createDropImagePlugin = (upload: UploadFn): Plugin => {\n const plugin: Plugin = new Plugin({\n key: ImagePluginKey,\n state: {\n // Initialize the plugin state with an empty DecorationSet\n init: () => DecorationSet.empty,\n // Apply transactions to update the state\n apply: (tr, old) => {\n // Handle custom transaction steps that update decorations\n const meta = tr.getMeta(plugin);\n if (meta && meta.decorationSet) {\n return meta.decorationSet;\n }\n // Map decorations to the new document structure\n return old.map(tr.mapping, tr.doc);\n }\n },\n props: {\n handleDOMEvents: {\n dragover: (view: EditorView, event: DragEvent) => {\n if (event.dataTransfer?.types?.includes(\"Files\")) {\n event.preventDefault();\n return true;\n }\n return false;\n },\n drop: (view: EditorView, event: DragEvent) => {\n if (!event.dataTransfer?.files || event.dataTransfer?.files.length === 0) {\n return false;\n }\n event.preventDefault();\n\n const files = Array.from(event.dataTransfer.files);\n const images = files.filter(file => /image/i.test(file.type));\n\n if (images.length === 0) {\n console.debug(\"No images found in dropped files\");\n return false;\n }\n\n images.forEach(image => {\n const position = view.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n if (!position) return;\n\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, position.pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n\n return true;\n }\n },\n handlePaste(view: EditorView, event: ClipboardEvent) {\n const html = event.clipboardData?.getData(\"text/html\");\n if (html && html.includes(\"<img\")) {\n // Let ProseMirror handle the HTML paste natively (e.g. copy-pasted from the editor itself or a webpage)\n return false;\n }\n\n const items = Array.from(event.clipboardData?.items || []);\n const pos = view.state.selection.from;\n let anyImageFound = false;\n\n items\n .filter((item) => item.type.startsWith(\"image/\"))\n .forEach((item) => {\n const image = item.getAsFile();\n if (image) {\n anyImageFound = true;\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n }\n });\n\n return anyImageFound;\n },\n decorations(state) {\n return plugin.getState(state);\n }\n }\n });\n\n return plugin;\n};\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n\n// Define and export the plugin key\nexport const loadingDecorationKey = new PluginKey<LoadingDecorationState>(\"loadingDecoration\");\n\ninterface LoadingDecorationState {\n decorationSet: DecorationSet;\n hasDecoration: boolean;\n}\n\nexport const textLoadingCommands = {\n toggleLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined, loadingHtml?: string): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos,\n type: \"loadingDecoration\",\n remove: false,\n loadingHtml\n });\n\n dispatch(tr);\n return true;\n },\n\n removeLoadingDecoration: (state: EditorState, dispatch: ((tr: Transaction) => void) | undefined): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(loadingDecorationKey, {\n pos: 0, // We can pass any position as it will remove the entire decoration set\n type: \"loadingDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n};\n\n/**\n * This plugin is used to display streaming content from an LLM.\n */\nexport const textLoadingDecorationPlugin = () => {\n return new Plugin<LoadingDecorationState>({\n key: loadingDecorationKey,\n\n state: {\n init() {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n },\n\n apply(tr, oldState) {\n const action = tr.getMeta(loadingDecorationKey);\n\n if (action?.type === \"loadingDecoration\") {\n const { pos, remove, loadingHtml } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty,\n hasDecoration: false\n };\n }\n\n const decoration = Decoration.widget(pos, () => {\n const container = document.createElement(\"span\");\n container.className = \"loading-decoration\";\n\n // Sanitize and append HTML\n if (loadingHtml) {\n container.innerHTML = loadingHtml;\n } else {\n const span = document.createElement(\"span\");\n span.innerText = \"loading...\";\n container.appendChild(span);\n }\n\n return container;\n });\n\n return {\n decorationSet: DecorationSet.empty.add(tr.doc, [decoration]),\n hasDecoration: true\n };\n }\n\n return {\n decorationSet: oldState.decorationSet.map(tr.mapping, tr.doc),\n hasDecoration: oldState.hasDecoration\n };\n }\n },\n\n props: {\n decorations(state) {\n return this.getState(state)?.decorationSet || DecorationSet.empty;\n }\n }\n });\n};\n","\nimport React, { useEffect, useRef, useState, ReactNode } from \"react\";\nimport { Fragment, DOMParser } from \"prosemirror-model\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement } from \"@floating-ui/dom\";\nimport { SlashCommandPluginKey } from \"../plugins/slashCommandPlugin\";\nimport {\n CheckSquareIcon,\n cls,\n CodeIcon,\n defaultBorderMixin,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n iconSize,\n ImageIcon,\n ListIcon,\n ListOrderedIcon,\n QuoteIcon,\n TableIcon,\n TypeIcon,\n Wand2Icon\n} from \"@rebasepro/ui\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { EditorView } from \"prosemirror-view\";\nimport { TextSelection } from \"prosemirror-state\";\nimport type { EditorAIController } from \"../types\";\nimport { onFileRead, UploadFn } from \"../extensions/Image\";\nimport { textLoadingCommands } from \"../extensions/TextLoadingDecorationExtension\";\nimport { parser } from \"../markdown\";\n\ninterface SuggestionItem {\n title: string;\n description: string;\n icon: ReactNode;\n searchTerms?: string[];\n command: (\n view: EditorView,\n range: { from: number; to: number },\n upload: UploadFn,\n aiController?: EditorAIController,\n setSubView?: (viewId: string | null) => void\n ) => void;\n}\n\nconst suggestionItems: SuggestionItem[] = [\n {\n title: \"Text\",\n description: \"Just start typing with plain text.\",\n searchTerms: [\"p\", \"paragraph\"],\n icon: <TypeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n }\n },\n {\n title: \"To-do List\",\n description: \"Track tasks with a to-do list.\",\n searchTerms: [\"todo\", \"task\", \"list\", \"check\", \"checkbox\"],\n icon: <CheckSquareIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.task_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 1\",\n description: \"Big section heading.\",\n searchTerms: [\"title\", \"big\", \"large\"],\n icon: <Heading1Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 1 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 2\",\n description: \"Medium section heading.\",\n searchTerms: [\"subtitle\", \"medium\"],\n icon: <Heading2Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 2 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Heading 3\",\n description: \"Small section heading.\",\n searchTerms: [\"subtitle\", \"small\"],\n icon: <Heading3Icon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.heading, { level: 3 })(view.state, view.dispatch);\n }\n },\n {\n title: \"Bullet List\",\n description: \"Create a simple bullet list.\",\n searchTerms: [\"unordered\", \"point\"],\n icon: <ListIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.bullet_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Numbered List\",\n description: \"Create a list with numbering.\",\n searchTerms: [\"ordered\"],\n icon: <ListOrderedIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapInList(schema.nodes.ordered_list)(view.state, view.dispatch);\n }\n },\n {\n title: \"Quote\",\n description: \"Capture a quote.\",\n searchTerms: [\"blockquote\"],\n icon: <QuoteIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n wrapIn(schema.nodes.blockquote)(view.state, view.dispatch);\n }\n },\n {\n title: \"Code\",\n description: \"Capture a code snippet.\",\n searchTerms: [\"codeblock\"],\n icon: <CodeIcon size={iconSize.small}/>,\n command: (view, range) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.code_block)(view.state, view.dispatch);\n }\n },\n {\n title: \"Image\",\n description: \"Upload an image from your computer.\",\n searchTerms: [\"photo\", \"picture\", \"media\", \"upload\", \"file\"],\n icon: <ImageIcon size={iconSize.small}/>,\n command: (view, range, upload) => {\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*\";\n input.onchange = async () => {\n if (input.files?.length) {\n const file = input.files[0];\n if (!file) return;\n const pos = view.state.selection.from;\n\n const images = Array.from(input.files).filter(f => /image/i.test(f.type));\n if (images.length === 0) return false;\n\n images.forEach(image => {\n const reader = new FileReader();\n reader.onload = async (readerEvent) => {\n await onFileRead(view, readerEvent, pos, upload, image);\n };\n reader.readAsDataURL(image);\n });\n }\n return true;\n };\n input.click();\n }\n },\n {\n title: \"Table\",\n description: \"Insert a custom grid table.\",\n searchTerms: [\"table\", \"grid\", \"row\", \"col\"],\n icon: <TableIcon size={iconSize.small}/>,\n command: (view, range, upload, aiController, setSubView) => {\n if (setSubView) setSubView(\"table-grid\");\n }\n }\n];\n\nconst autocompleteSuggestionItem: SuggestionItem = {\n title: \"Autocomplete\",\n description: \"Add text based on the context.\",\n searchTerms: [\"ai\"],\n icon: <Wand2Icon size={iconSize.small}/>,\n command: async (view, range, upload, aiController) => {\n if (!aiController) throw Error(\"No AiController\");\n\n view.dispatch(view.state.tr.deleteRange(range.from, range.to));\n setBlockType(schema.nodes.paragraph)(view.state, view.dispatch);\n\n const { state } = view;\n const { from, to } = state.selection;\n\n const textBeforeCursor = state.doc.textBetween(0, from, \"\\n\");\n const textAfterCursor = state.doc.textBetween(to, state.doc.content.size, \"\\n\");\n\n let buffer = \"\";\n const result = await aiController.autocomplete(textBeforeCursor, textAfterCursor, (delta) => {\n buffer += delta;\n if (delta.length !== 0) {\n textLoadingCommands.toggleLoadingDecoration(view.state, view.dispatch, buffer);\n }\n });\n\n // Insert parsed text result at cursor natively\n try {\n // The AI controller might stream literal \"\\n\" characters depending on its JSON decoding layer.\n // We need to un-escape these back to genuine newlines so MarkdownIt block-parsing works.\n const unescapedResult = result.replace(/\\\\n/g, \"\\n\").replace(/\\\\t/g, \"\\t\");\n\n const isHTML = /<\\/?[a-z][\\s\\S]*>/i.test(unescapedResult);\n let parsedDoc;\n\n if (isHTML) {\n const div = document.createElement(\"div\");\n div.innerHTML = unescapedResult;\n parsedDoc = DOMParser.fromSchema(view.state.schema).parse(div);\n } else {\n parsedDoc = parser.parse(unescapedResult);\n }\n\n if (parsedDoc) {\n const tr = view.state.tr.replaceWith(view.state.selection.from, view.state.selection.from, parsedDoc.content);\n view.dispatch(tr);\n } else {\n view.dispatch(view.state.tr.insertText(unescapedResult));\n }\n } catch (e) {\n console.error(e);\n view.dispatch(view.state.tr.insertText(result));\n }\n }\n};\n\nexport const SlashCommandMenu = ({ upload, aiController }: { upload: UploadFn, aiController?: EditorAIController }) => {\n const { view, state } = useProseMirrorContext();\n const menuRef = useRef<HTMLDivElement>(null);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [subView, setSubView] = useState<string | null>(null);\n const [tableGridCoords, setTableGridCoords] = useState({ r: 0,\nc: 0 });\n\n const pluginState = state ? SlashCommandPluginKey.getState(state) : null;\n const isActive = pluginState?.active;\n const query = pluginState?.query || \"\";\n const range = pluginState?.range;\n\n const filteredItems = React.useMemo(() => {\n if (!isActive) return [];\n const availableItems = [...suggestionItems];\n if (aiController) availableItems.push(autocompleteSuggestionItem);\n\n return availableItems.filter(item => {\n const inTitle = item.title.toLowerCase().includes(query.toLowerCase());\n if (inTitle) return inTitle;\n return item.searchTerms?.some(term => term.toLowerCase().includes(query.toLowerCase()));\n });\n }, [query, isActive, aiController]);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n useEffect(() => {\n if (!isActive) setSubView(null);\n }, [isActive]);\n\n useEffect(() => {\n if (!view || !isActive || !range || !menuRef.current) return;\n\n const start = view.coordsAtPos(range.from);\n const virtualEl = {\n getBoundingClientRect() {\n return {\n width: 0,\n height: start.bottom - start.top,\n x: start.left,\n y: start.top,\n top: start.top,\n left: start.left,\n right: start.left,\n bottom: start.bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: \"bottom-start\",\n middleware: [offset(4), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [view, isActive, range]);\n\n useEffect(() => {\n if (!isActive || !view) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (subView === \"table-grid\") {\n if (e.key === \"Escape\") {\n e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.max(0, prev.r - 1),\nc: prev.c }));\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: Math.min(4, prev.r + 1),\nc: prev.c }));\n } else if (e.key === \"ArrowLeft\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.max(0, prev.c - 1) }));\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault(); e.stopPropagation();\n setTableGridCoords(prev => ({ r: prev.r,\nc: Math.min(4, prev.c + 1) }));\n } else if (e.key === \"Enter\") {\n e.preventDefault(); e.stopPropagation();\n if (range) {\n const tableNode = createTableNode(view.state.schema, tableGridCoords.r + 1, tableGridCoords.c + 1);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + filteredItems.length - 1) % filteredItems.length);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n e.stopPropagation();\n setSelectedIndex(prev => (prev + 1) % filteredItems.length);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n e.stopPropagation();\n if (filteredItems[selectedIndex] && range) {\n filteredItems[selectedIndex].command(view, range, upload, aiController, setSubView);\n // Do not focus view if a subview opened\n setTimeout(() => {\n // Focus is managed by the caller\n }, 0);\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n // Close menu gracefully and keep it dismissed\n view.dispatch(view.state.tr.setMeta(SlashCommandPluginKey, { active: false,\ndismissed: true }));\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => window.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [isActive, selectedIndex, filteredItems, view, range, upload, aiController, subView, tableGridCoords]);\n\n const itemRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n useEffect(() => {\n if (itemRefs.current[selectedIndex]) {\n itemRefs.current[selectedIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [selectedIndex]);\n\n useEffect(() => {\n if (!subView) {\n setTableGridCoords({ r: 0,\nc: 0 });\n }\n }, [subView]);\n\n if (!isActive || filteredItems.length === 0) return null;\n\n if (subView === \"table-grid\" && range && view) {\n return (\n <div\n ref={menuRef}\n onMouseDown={(e) => e.preventDefault()}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white rounded-md border bg-white dark:bg-surface-800 p-2 shadow transition-none\", defaultBorderMixin)}\n >\n <TableGridPicker\n hoveredRow={tableGridCoords.r}\n hoveredCol={tableGridCoords.c}\n onHover={(r, c) => setTableGridCoords({ r,\nc })}\n onSelect={(rows, cols) => {\n const tableNode = createTableNode(view.state.schema, rows, cols);\n const tr = view.state.tr.replaceWith(range.from, range.to, tableNode);\n try {\n const selection = TextSelection.create(tr.doc, range.from + 4);\n tr.setSelection(selection);\n } catch (e) {\n console.warn(\"Could not select first cell\", e);\n }\n tr.setMeta(SlashCommandPluginKey, { active: false });\n view.dispatch(tr);\n view.focus();\n setSubView(null);\n }}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={menuRef}\n style={{ position: \"fixed\",\nzIndex: 9999,\nvisibility: \"hidden\" }}\n className={cls(\"text-surface-900 dark:text-white max-h-[280px] w-72 overflow-y-auto rounded-md border bg-white dark:bg-surface-800 px-1 py-2 shadow transition-none\", defaultBorderMixin)}\n >\n {filteredItems.map((item, index) => (\n <button\n key={item.title}\n ref={el => { itemRefs.current[index] = el; }}\n onClick={(e) => {\n e.preventDefault();\n if (range && view) {\n item.command(view, range, upload, aiController, setSubView);\n // Only focus back to editor if it didn't open a sub-view\n if (!subView) view.focus();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n className={cls(\"flex w-full items-center space-x-2 rounded-md px-2 py-1 text-left text-sm hover:bg-blue-50 hover:dark:bg-surface-700\",\n index === selectedIndex ? \"bg-blue-100 dark:bg-surface-accent-950\" : \"\")}\n >\n <div className={cls(\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border bg-white dark:bg-surface-800\", defaultBorderMixin)}>\n {item.icon}\n </div>\n <div className=\"flex flex-col overflow-hidden\">\n <p className=\"font-medium truncate\">{item.title}</p>\n <p className=\"text-xs text-surface-700 dark:text-surface-accent-300 truncate\">\n {item.description}\n </p>\n </div>\n </button>\n ))}\n </div>\n );\n};\n\nconst createTableNode = (schema: import(\"prosemirror-model\").Schema, rowsCount: number, colsCount: number) => {\n const rows = [];\n for (let r = 0; r < rowsCount; r++) {\n const cells = [];\n for (let c = 0; c < colsCount; c++) {\n const isHeader = r === 0;\n const cellType = isHeader ? schema.nodes.table_header : schema.nodes.table_cell;\n const cell = cellType.createAndFill();\n if (cell) cells.push(cell);\n }\n const row = schema.nodes.table_row.create(null, Fragment.from(cells));\n rows.push(row);\n }\n return schema.nodes.table.create(null, Fragment.from(rows));\n};\n\nconst TableGridPicker = ({\n hoveredRow,\n hoveredCol,\n onHover,\n onSelect\n}: {\n hoveredRow: number;\n hoveredCol: number;\n onHover: (r: number, c: number) => void;\n onSelect: (r: number, c: number) => void;\n}) => {\n return (\n <div className=\"flex flex-col gap-1 items-center justify-center p-1 w-fit\">\n <span className=\"text-xs text-gray-500 font-medium mb-1\">\n {hoveredCol + 1} x {hoveredRow + 1} Table\n </span>\n <div className=\"flex flex-col gap-1\">\n {Array.from({ length: 5 }).map((_, r) => (\n <div key={r} className=\"flex gap-1\">\n {Array.from({ length: 5 }).map((_, c) => (\n <div\n key={c}\n className={cls(\n \"w-5 h-5 border rounded-sm cursor-pointer transition-colors duration-75\",\n r <= hoveredRow && c <= hoveredCol\n ? \"bg-blue-100 border-blue-400 dark:bg-blue-900 dark:border-blue-500\"\n : \"bg-white dark:bg-surface-800 border-gray-200 dark:border-gray-700 hover:border-blue-300\"\n )}\n onMouseEnter={() => onHover(r, c)}\n onClick={() => onSelect(hoveredRow + 1, hoveredCol + 1)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n};\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { autoUpdate, computePosition, flip, offset, shift, type VirtualElement, type Placement } from \"@floating-ui/dom\";\nimport { NodeSelection } from \"prosemirror-state\";\nimport { TextField, defaultBorderMixin, Typography, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nexport interface ImageBubbleProps {\n options?: { placement?: Placement; offset?: number };\n className?: string;\n}\n\nexport const ImageBubble = forwardRef<HTMLDivElement, ImageBubbleProps>(\n ({\n options,\n className\n }, ref) => {\n const {\n view,\n state\n } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n const [alt, setAlt] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [imagePos, setImagePos] = useState<number | null>(null);\n\n useEffect(() => {\n if (!view) return;\n const handleContextMenu = (e: MouseEvent) => {\n const posInfo = view.posAtCoords({\n left: e.clientX,\n top: e.clientY\n });\n if (posInfo && posInfo.inside >= 0) {\n const node = view.state.doc.nodeAt(posInfo.inside);\n if (node && node.type.name === \"image\") {\n e.preventDefault();\n const tr = view.state.tr.setSelection(NodeSelection.create(view.state.doc, posInfo.inside));\n view.dispatch(tr);\n setShow(true);\n setAlt(node.attrs.alt || \"\");\n setTitle(node.attrs.title || \"\");\n setImagePos(posInfo.inside);\n }\n }\n };\n view.dom.addEventListener(\"contextmenu\", handleContextMenu);\n\n const handleMousedown = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node) && e.button !== 2) {\n setShow(false);\n }\n };\n document.addEventListener(\"mousedown\", handleMousedown);\n\n return () => {\n view.dom.removeEventListener(\"contextmenu\", handleContextMenu);\n document.removeEventListener(\"mousedown\", handleMousedown);\n };\n }, [view]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const {\n from,\n to\n } = state.selection;\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n left,\n right,\n bottom\n };\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"bottom\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({\n x,\n y\n }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n const handleSave = (newAlt: string, newTitle: string) => {\n if (imagePos !== null && view) {\n const node = view.state.doc.nodeAt(imagePos);\n if (node && node.type.name === \"image\") {\n const tr = view.state.tr.setNodeMarkup(imagePos, undefined, {\n ...node.attrs,\n alt: newAlt,\n title: newTitle\n });\n // Preserve the node selection so the bubble stays open!\n tr.setSelection(NodeSelection.create(tr.doc, imagePos));\n view.dispatch(tr);\n }\n }\n };\n\n if (!show) return null;\n\n return (\n <div\n ref={menuRef}\n style={{\n visibility: \"hidden\",\n position: \"fixed\",\n zIndex: 50\n }}\n className={cls(\"flex flex-col gap-1.5 p-2 w-56 max-w-[90vw] rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from inputs\n // but we don't want to prevent typing\n // Only prevent if clicking on the container background\n if (e.target === e.currentTarget) {\n e.preventDefault();\n }\n }}\n >\n <TextField\n size={\"small\"}\n placeholder={t(\"alt_text\")}\n value={alt}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setAlt(e.target.value);\n handleSave(e.target.value, title);\n }}\n />\n <TextField\n size={\"small\"}\n placeholder={t(\"title\")}\n value={title}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setTitle(e.target.value);\n handleSave(alt, e.target.value);\n }}\n />\n </div>\n );\n }\n);\n\nImageBubble.displayName = \"ImageBubble\";\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport {\n autoUpdate,\n computePosition,\n flip,\n offset,\n shift,\n type VirtualElement,\n type Placement\n} from \"@floating-ui/dom\";\nimport { IconButton, Tooltip, defaultBorderMixin, cls } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport {\n addColumnBefore,\n addColumnAfter,\n deleteColumn,\n addRowBefore,\n addRowAfter,\n deleteRow,\n deleteTable\n} from \"prosemirror-tables\";\nimport { EditorState } from \"prosemirror-state\";\n\nexport interface TableBubbleProps {\n options?: { placement?: Placement; offset?: number };\n className?: string;\n}\n\nconst isSelectionInTable = (state: EditorState) => {\n const { $from } = state.selection;\n for (let d = $from.depth; d > 0; d--) {\n if ($from.node(d).type.name === \"table\") {\n return true;\n }\n }\n return false;\n};\n\n// We create separate icon components if they don't exist in @rebasepro/ui\n// using basic SVGs for now, or we can use existing ones if we know them.\n// Wait, I will use generic SVGs for these since I don't know if @rebasepro/ui has them.\n\nexport const TableBubble = forwardRef<HTMLDivElement, TableBubbleProps>(\n ({\n options,\n className\n }, ref) => {\n const {\n view,\n state\n } = useProseMirrorContext();\n const { t } = useTranslation();\n const menuRef = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n if (!state) return;\n setShow(isSelectionInTable(state));\n }, [state?.selection]);\n\n useEffect(() => {\n if (!show || !view || !state || !menuRef.current) return;\n\n const {\n from,\n to\n } = state.selection;\n\n // Safety measure: if view.docView is destroyed, coordsAtPos might crash\n if (view.isDestroyed) return;\n\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to);\n\n const virtualEl = {\n getBoundingClientRect() {\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n top,\n bottom,\n left,\n right\n } as DOMRect;\n }\n };\n\n const cleanup = autoUpdate(virtualEl as VirtualElement, menuRef.current, () => {\n if (!menuRef.current || view.isDestroyed) return;\n try {\n start = view.coordsAtPos(state.selection.from);\n end = view.coordsAtPos(state.selection.to);\n } catch (e) {\n // Ignore errors during fast remounts/updates\n }\n\n computePosition(virtualEl as VirtualElement, menuRef.current, {\n placement: options?.placement || \"top\",\n middleware: [offset(options?.offset || 8), flip(), shift()],\n strategy: \"fixed\"\n }).then(({\n x,\n y\n }) => {\n if (menuRef.current) {\n Object.assign(menuRef.current.style, {\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\"\n });\n }\n });\n });\n return () => cleanup();\n }, [show, view, state, options]);\n\n if (!show || !view || !state) return null;\n\n const executeCommand = (cmd: (state: EditorState, dispatch?: (tr: import(\"prosemirror-state\").Transaction) => void) => boolean) => {\n cmd(state, view.dispatch);\n view.focus();\n };\n\n return (\n <div\n ref={menuRef}\n style={{\n visibility: \"hidden\",\n position: \"fixed\",\n zIndex: 50\n }}\n className={cls(\"flex flex-row gap-1 p-1 rounded-lg border bg-white dark:bg-surface-800 shadow-lg\", defaultBorderMixin, className)}\n onMouseDown={(e) => {\n // Prevent mousedown from stealing focus from the editor\n e.preventDefault();\n }}\n >\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_row_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_row_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addRowAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"20\"></line>\n <line x1=\"8\" y1=\"16\" x2=\"16\" y2=\"16\"></line>\n <line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_row\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteRow)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <div className=\"flex gap-1 border-r pr-1 mr-1 dark:border-gray-700\">\n <Tooltip title={t(\"add_column_before\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnBefore)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"8\" y1=\"12\" x2=\"16\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"add_column_after\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(addColumnAfter)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"12\" y1=\"12\" x2=\"20\" y2=\"12\"></line>\n <line x1=\"16\" y1=\"8\" x2=\"16\" y2=\"16\"></line>\n <line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n <Tooltip title={t(\"delete_column\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteColumn)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\"></line>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"16\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n </div>\n\n <Tooltip title={t(\"delete_table\")}>\n <IconButton size=\"small\" onClick={() => executeCommand(deleteTable)}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"3 6 5 6 21 6\"></polyline>\n <path\n d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </IconButton>\n </Tooltip>\n </div>\n );\n }\n);\n\nTableBubble.displayName = \"TableBubble\";\n","import { EditorState, TextSelection, Transaction } from \"prosemirror-state\";\nimport { MarkType, NodeType, Node as ProseMirrorNode } from \"prosemirror-model\";\n\nexport function isMarkActive(state: EditorState, type: MarkType) {\n if (!state || !type) return false;\n const { from, $from, to, empty } = state.selection;\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks());\n return state.doc.rangeHasMark(from, to, type);\n}\n\nexport function isNodeActive(state: EditorState, type: NodeType, attrs: Record<string, unknown> = {}) {\n if (!state || !type) return false;\n const selection = state.selection;\n const { $from, to } = selection;\n const node = selection instanceof TextSelection ? undefined : (selection as { node?: ProseMirrorNode }).node;\n if (node) {\n return node.type === type && (!attrs || Object.keys(attrs).every((key) => node.attrs[key] === attrs[key]));\n }\n return to <= $from.end() && $from.parent.type === type && (!attrs || Object.keys(attrs).every((key) => $from.parent.attrs[key] === attrs[key]));\n}\n\nexport function getMarkAttributes(state: EditorState, type: MarkType) {\n if (!state || !type) return {};\n const { from, $from, to, empty } = state.selection;\n let mark;\n if (empty) {\n mark = type.isInSet(state.storedMarks || $from.marks());\n } else {\n let found = false;\n state.doc.nodesBetween(from, to, (node) => {\n if (found) return false;\n const m = type.isInSet(node.marks);\n if (m) {\n mark = m;\n found = true;\n }\n return true;\n });\n }\n return mark ? mark.attrs : {};\n}\n\nexport function setMark(type: MarkType, attrs?: Record<string, unknown>) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n if ($cursor) {\n dispatch(state.tr.addStoredMark(type.create(attrs)));\n } else {\n const tr = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.addMark($from.pos, $to.pos, type.create(attrs));\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n\nexport function unsetMark(type: MarkType) {\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\n const selection = state.selection as TextSelection;\n const { empty, $cursor, ranges } = selection;\n if ((empty && !$cursor) || !type) return false;\n if (dispatch) {\n const tr = state.tr;\n if ($cursor) {\n const parent = $cursor.parent;\n let markStart = -1;\n let markEnd = -1;\n let currentMarkStart = -1;\n\n parent.forEach((child: ProseMirrorNode, offset: number) => {\n const childStart = $cursor.start() + offset;\n const childEnd = childStart + child.nodeSize;\n\n if (type.isInSet(child.marks)) {\n if (currentMarkStart === -1) currentMarkStart = childStart;\n if ($cursor.pos >= childStart && $cursor.pos <= childEnd) {\n markStart = currentMarkStart;\n }\n } else {\n if (currentMarkStart !== -1) {\n if (markStart !== -1 && markEnd === -1) markEnd = childStart;\n currentMarkStart = -1;\n }\n }\n });\n\n if (markStart !== -1 && markEnd === -1) {\n markEnd = $cursor.end();\n }\n\n if (markStart !== -1 && markEnd !== -1) {\n tr.removeMark(markStart, markEnd, type);\n }\n tr.removeStoredMark(type);\n dispatch(tr.scrollIntoView());\n } else {\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i];\n tr.removeMark($from.pos, $to.pos, type);\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nimport {\n Button,\n CheckIcon,\n CheckSquareIcon,\n ChevronDownIcon,\n CodeIcon,\n Heading1Icon,\n Heading2Icon,\n Heading3Icon,\n iconSize,\n ListIcon,\n ListOrderedIcon,\n Popover,\n QuoteIcon,\n TypeIcon\n} from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isNodeActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { setBlockType, wrapIn } from \"prosemirror-commands\";\nimport { wrapInList } from \"prosemirror-schema-list\";\n\nexport type SelectorItem = {\n name: string;\n labelKey: string;\n icon: React.ElementType;\n command: (state: EditorState, dispatch: (tr: Transaction) => void) => void;\n isActive: (state: EditorState) => boolean;\n};\n\nconst items: SelectorItem[] = [\n {\n name: \"Text\",\n labelKey: \"editor_text\",\n icon: TypeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.paragraph)(state, dispatch),\n isActive: (state) =>\n isNodeActive(state, schema.nodes.paragraph) &&\n !isNodeActive(state, schema.nodes.bullet_list) &&\n !isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Heading 1\",\n labelKey: \"editor_heading_1\",\n icon: Heading1Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 1 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 1 })\n },\n {\n name: \"Heading 2\",\n labelKey: \"editor_heading_2\",\n icon: Heading2Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 2 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 2 })\n },\n {\n name: \"Heading 3\",\n labelKey: \"editor_heading_3\",\n icon: Heading3Icon,\n command: (state, dispatch) => setBlockType(schema.nodes.heading, { level: 3 })(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.heading, { level: 3 })\n },\n {\n name: \"To-do List\",\n labelKey: \"editor_todo_list\",\n icon: CheckSquareIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.task_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.task_item)\n },\n {\n name: \"Bullet List\",\n labelKey: \"editor_bullet_list\",\n icon: ListIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.bullet_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.bullet_list)\n },\n {\n name: \"Numbered List\",\n labelKey: \"editor_numbered_list\",\n icon: ListOrderedIcon,\n command: (state, dispatch) => wrapInList(schema.nodes.ordered_list)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.ordered_list)\n },\n {\n name: \"Quote\",\n labelKey: \"editor_quote\",\n icon: QuoteIcon,\n command: (state, dispatch) => wrapIn(schema.nodes.blockquote)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.blockquote)\n },\n {\n name: \"Code\",\n labelKey: \"editor_code\",\n icon: CodeIcon,\n command: (state, dispatch) => setBlockType(schema.nodes.code_block)(state, dispatch),\n isActive: (state) => isNodeActive(state, schema.nodes.code_block)\n }\n];\n\ninterface NodeSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n portalContainer: HTMLElement | null;\n}\n\nexport const NodeSelector = ({\n open,\n onOpenChange,\n portalContainer\n}: NodeSelectorProps) => {\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n if (!state || !view) return null;\n\n const activeItem = items.filter((item) => item.isActive(state)).pop() ?? {\n name: \"Multiple\",\n labelKey: \"editor_multiple\"\n };\n\n return (\n <Popover\n sideOffset={5}\n align=\"start\"\n portalContainer={portalContainer}\n className=\"w-48 p-1\"\n trigger={<Button variant=\"text\"\n className=\"gap-2 rounded-none\"\n color=\"text\">\n <span className=\"whitespace-nowrap text-sm\">{t(activeItem.labelKey)}</span>\n <ChevronDownIcon size={iconSize.small}/>\n </Button>}\n modal={true}\n open={open}\n onOpenChange={onOpenChange}>\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }}\n className=\"flex cursor-pointer items-center justify-between rounded px-2 py-1 text-sm hover:bg-blue-50 hover:dark:bg-surface-700 text-surface-900 dark:text-white\"\n >\n <div className=\"flex items-center space-x-2\">\n <item.icon size={iconSize.smallest}/>\n <span>{t(item.labelKey)}</span>\n </div>\n {activeItem.name === item.name && <CheckIcon size={iconSize.smallest}/>}\n </EditorBubbleItem>\n ))}\n </Popover>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { Button, CheckIcon, cls, focusedDisabled, iconSize, Popover, TextField, Trash2Icon } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { getMarkAttributes, isMarkActive, setMark, unsetMark } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\n\nexport function isValidUrl(url: string) {\n try {\n new URL(url);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport function getUrlFromString(str: string) {\n if (isValidUrl(str)) return str;\n try {\n if (str.includes(\".\") && !str.includes(\" \")) {\n return new URL(`https://${str}`).toString();\n }\n return null;\n } catch (e) {\n return null;\n }\n}\n\ninterface LinkSelectorProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nexport const LinkSelector = ({\n open,\n onOpenChange\n}: LinkSelectorProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const { state, view } = useProseMirrorContext();\n const { t } = useTranslation();\n\n // Autofocus on input by default\n useEffect(() => {\n if (open && inputRef.current) {\n inputRef.current.focus();\n }\n }, [open]);\n\n if (!state || !view) return null;\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const value = inputRef.current?.value;\n if (!value) return;\n const url = getUrlFromString(value);\n if (url) {\n setMark(schema.marks.link, { href: url })(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n }\n };\n\n const handleRemoveLink = () => {\n unsetMark(schema.marks.link)(view.state, view.dispatch);\n view.focus();\n onOpenChange(false);\n };\n\n const isActive = isMarkActive(state, schema.marks.link);\n const href = getMarkAttributes(state, schema.marks.link).href || \"\";\n\n return (\n <Popover modal={true}\n open={open}\n onOpenChange={onOpenChange}\n trigger={<Button variant=\"text\"\n type=\"button\"\n className=\"gap-2 rounded-none\"\n color={\"text\"}>\n <p className={cls(\"underline decoration-stone-400 underline-offset-4\", {\n \"text-blue-500\": isActive\n })}>\n {t(\"editor_link\")}\n </p>\n </Button>}>\n <form\n onSubmit={handleSubmit}\n className=\"flex p-1 gap-1\"\n >\n <TextField\n inputRef={inputRef}\n autoFocus={open}\n placeholder={t(\"editor_paste_or_type_link\")}\n defaultValue={href}\n size=\"small\"\n className=\"flex-grow text-surface-900 dark:text-white\"\n inputClassName={cls(\"bg-transparent p-1 text-sm outline-none\", focusedDisabled)}\n />\n\n {href ? (\n <Button\n size={\"small\"}\n variant=\"text\"\n type=\"button\"\n color={\"text\"}\n className=\"flex items-center\"\n onClick={handleRemoveLink}\n >\n <Trash2Icon size={iconSize.small}/>\n </Button>\n ) : (\n <Button size={\"small\"}\n type=\"submit\"\n variant={\"text\"}>\n <CheckIcon size={iconSize.small}/>\n </Button>\n )}\n </form>\n </Popover>\n );\n};\n","\nimport { EditorState, Transaction } from \"prosemirror-state\";\nimport { EditorBubbleItem } from \"../components\";\nimport type { SelectorItem } from \"./node-selector\";\nimport { BoldIcon, Button, cls, CodeIcon, ItalicIcon, StrikethroughIcon, UnderlineIcon } from \"@rebasepro/ui\";\nimport { useProseMirrorContext } from \"../hooks/useProseMirrorContext\";\nimport { isMarkActive } from \"../utils/prosemirror-utils\";\nimport { schema } from \"../schema\";\nimport { toggleMark } from \"prosemirror-commands\";\n\nexport const TextButtons = () => {\n const { state, view } = useProseMirrorContext();\n if (!state || !view) return null;\n\n // We pass state directly to isActive, and dispatch to command\n const items = [\n {\n name: \"bold\",\n labelKey: \"editor_bold\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.bold),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.bold)(s, dispatch),\n icon: BoldIcon\n },\n {\n name: \"italic\",\n labelKey: \"editor_italic\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.italic),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.italic)(s, dispatch),\n icon: ItalicIcon\n },\n {\n name: \"underline\",\n labelKey: \"editor_underline\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.underline),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.underline)(s, dispatch),\n icon: UnderlineIcon\n },\n {\n name: \"strike\",\n labelKey: \"editor_strikethrough\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.strike),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.strike)(s, dispatch),\n icon: StrikethroughIcon\n },\n {\n name: \"code\",\n labelKey: \"editor_code\",\n isActive: (s: EditorState) => isMarkActive(s, schema.marks.code),\n command: (s: EditorState, dispatch: (tr: Transaction) => void) => toggleMark(schema.marks.code)(s, dispatch),\n icon: CodeIcon\n }\n ];\n\n return (\n <div className=\"flex\">\n {items.map((item, index) => (\n <EditorBubbleItem\n key={index}\n onSelect={() => {\n item.command(view.state, view.dispatch);\n view.focus();\n }}\n >\n <Button size={\"small\"}\n color=\"text\"\n className=\"gap-2 rounded-none h-full\"\n variant=\"text\">\n <item.icon\n className={cls({\n \"text-inherit\": !item.isActive(state),\n \"text-blue-500\": item.isActive(state)\n })}\n />\n </Button>\n </EditorBubbleItem>\n ))}\n </div>\n );\n};\n","export function removeClassesFromJson(jsonObj: unknown): unknown {\n // If it's an array, apply the function to each element\n if (Array.isArray(jsonObj)) {\n return jsonObj.map(item => removeClassesFromJson(item));\n } else if (typeof jsonObj === \"object\" && jsonObj !== null) { // If it's an object, recurse through its properties\n const obj = jsonObj as Record<string, unknown>;\n // If the object has an `attrs` property and `class` field, delete the `class` field\n if (obj.attrs && typeof obj.attrs === \"object\" && obj.attrs !== null && \"class\" in (obj.attrs as Record<string, unknown>)) {\n delete (obj.attrs as Record<string, unknown>).class;\n }\n\n // Apply the function recursively to object properties\n Object.keys(obj).forEach(key => {\n obj[key] = removeClassesFromJson(obj[key]);\n });\n }\n return jsonObj;\n}\n","import { DOMSerializer, Slice } from \"prosemirror-model\"\nimport { EditorView } from \"prosemirror-view\";\n\nexport function serializeForClipboard(view: EditorView, slice: Slice) {\n view.someProp(\"transformCopied\", f => {\n slice = f(slice!, view)\n })\n\n const context = [];\n let {\n content,\n openStart,\n openEnd\n } = slice\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild!.childCount == 1) {\n openStart--\n openEnd--\n const node = content.firstChild!\n // @ts-ignore\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null)\n content = node.content\n }\n\n const serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema)\n const doc = detachedDoc(), wrap = doc.createElement(\"div\")\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }))\n\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n const wrapper = doc.createElement(needsWrap[i])\n while (wrap.firstChild) wrapper.appendChild(wrap.firstChild)\n wrap.appendChild(wrapper)\n wrappers++\n }\n firstChild = wrap.firstChild\n }\n\n if (firstChild && firstChild.nodeType == 1)\n (firstChild as HTMLElement).setAttribute(\n \"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`)\n\n const text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\")\n\n return {\n dom: wrap,\n text,\n slice\n }\n}\n\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap: { [node: string]: string[] } = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n}\n\nlet _detachedDoc: Document | null = null\n\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"))\n}\n","import { NodeSelection, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { Slice } from \"prosemirror-model\";\nimport { serializeForClipboard } from \"./clipboard\";\n\n/** ProseMirror internal drag state — not exposed in type definitions */\ninterface ProseMirrorDragState {\n slice: Slice;\n move: boolean;\n node?: NodeSelection;\n}\n\n/** EditorView with access to the internal `dragging` property */\ninterface EditorViewWithDrag extends EditorView {\n dragging: ProseMirrorDragState | null;\n}\n\nexport interface DragHandleOptions {\n /**\n * The width of the drag handle\n */\n dragHandleWidth: number;\n}\n\nfunction absoluteRect(element: Element) {\n const data = element.getBoundingClientRect();\n\n let ancestor = element.parentElement;\n while (ancestor && window.getComputedStyle(ancestor).position === \"static\") {\n ancestor = ancestor.parentElement;\n }\n const ancestorRect = ancestor?.getBoundingClientRect();\n\n return {\n top: data.top - (ancestorRect?.top ?? 0),\n left: data.left - (ancestorRect?.left ?? 0),\n width: data.width\n };\n}\n\nfunction nodeDOMAtCoords(coords: { x: number; y: number }, view: EditorView) {\n const editorRect = view.dom.getBoundingClientRect();\n\n // 0. Give up if outside vertical bounds or too far horizontally\n if (coords.y < editorRect.top || coords.y > editorRect.bottom) return undefined;\n if (coords.x < editorRect.left - 100 || coords.x > editorRect.right + 50) return undefined;\n\n const blockSelector = 'li, p, pre, blockquote, h1, h2, h3, h4, h5, h6, img, [data-type=\"taskList\"]';\n\n // 1. First probe exactly at the mouse coordinates\n const elem = document.elementFromPoint(coords.x, coords.y);\n const block = elem?.closest(blockSelector);\n if (block && view.dom.contains(block) && block.textContent?.trim()) {\n const li = block.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : block;\n }\n\n // 2. If mouse is in the left gutter, probe horizontally into the editor\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n if (coords.x > probeX) return undefined;\n\n const probeElem = document.elementFromPoint(probeX, coords.y);\n const probeBlock = probeElem?.closest(blockSelector);\n if (probeBlock && probeBlock.textContent?.trim()) {\n // Ensure the found block is actually inside our editor\n if (view.dom.contains(probeBlock)) {\n const li = probeBlock.closest(\"li\");\n return (li && view.dom.contains(li)) ? li : probeBlock;\n }\n }\n\n return undefined;\n}\n\nfunction nodePosAtDOM(node: Element, view: EditorView, options: DragHandleOptions) {\n try {\n if (!view.dom.contains(node)) return null;\n const pos = view.posAtDOM(node, 0);\n const $pos = view.state.doc.resolve(pos);\n // posAtDOM(node, 0) generally returns the position inside the node.\n // We want the position right before the node to create a NodeSelection.\n if ($pos.depth > 0) {\n return $pos.before();\n }\n return pos;\n } catch (e) {\n return null;\n }\n}\n\nexport function dragHandlePlugin(options: DragHandleOptions = { dragHandleWidth: 24 }) {\n function handleDragStart(event: DragEvent, view: EditorView) {\n view.focus();\n\n if (!event.dataTransfer) return;\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (nodePos == null || nodePos < 0) return;\n\n const draggedNodeSelection = NodeSelection.create(view.state.doc, nodePos);\n view.dispatch(view.state.tr.setSelection(draggedNodeSelection));\n\n const slice = view.state.selection.content();\n const {\n dom,\n text\n } = serializeForClipboard(view as EditorViewWithDrag, slice);\n\n event.dataTransfer.clearData();\n event.dataTransfer.setData(\"text/html\", dom.innerHTML);\n event.dataTransfer.setData(\"text/plain\", text);\n event.dataTransfer.effectAllowed = \"copyMove\";\n\n event.dataTransfer.setDragImage(node, 0, 0);\n\n (view as EditorViewWithDrag).dragging = {\n slice,\n move: true,\n node: draggedNodeSelection\n };\n }\n\n function handleClick(event: MouseEvent, view: EditorView) {\n view.focus();\n\n view.dom.classList.remove(\"dragging\");\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) return;\n\n const nodePos = nodePosAtDOM(node, view, options);\n if (!nodePos) return;\n\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, nodePos)));\n }\n\n let dragHandleElement: HTMLElement | null = null;\n\n function hideDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.add(\"hide\");\n dragHandleElement.style.opacity = \"0\";\n dragHandleElement.style.pointerEvents = \"none\";\n }\n }\n\n function showDragHandle() {\n if (dragHandleElement) {\n dragHandleElement.classList.remove(\"hide\");\n dragHandleElement.style.opacity = \"1\";\n dragHandleElement.style.pointerEvents = \"auto\";\n }\n }\n\n return new Plugin({\n view: (view) => {\n dragHandleElement = document.createElement(\"div\");\n dragHandleElement.draggable = true;\n dragHandleElement.dataset.dragHandle = \"\";\n dragHandleElement.classList.add(\"drag-handle\");\n dragHandleElement.addEventListener(\"dragstart\", (e) => {\n handleDragStart(e, view);\n });\n dragHandleElement.addEventListener(\"click\", (e) => {\n handleClick(e, view);\n });\n const onMouseMove = (event: MouseEvent) => {\n if (!view.editable) {\n return;\n }\n\n const node = nodeDOMAtCoords({\n x: event.clientX,\n y: event.clientY\n }, view);\n\n if (!(node instanceof Element)) {\n hideDragHandle();\n return;\n }\n\n const compStyle = window.getComputedStyle(node);\n const lineHeight = parseInt(compStyle.lineHeight, 10);\n const paddingTop = parseInt(compStyle.paddingTop, 10);\n\n const rect = absoluteRect(node);\n if (!rect) {\n hideDragHandle();\n return;\n }\n\n rect.top += (lineHeight - 24) / 2;\n rect.top += paddingTop;\n // Li markers\n if (node.matches(\"ul:not([data-type=taskList]) li, ol li\")) {\n rect.left -= options.dragHandleWidth;\n }\n rect.width = options.dragHandleWidth;\n\n if (!dragHandleElement) return;\n\n dragHandleElement.style.left = `${rect.left - rect.width}px`;\n dragHandleElement.style.top = `${rect.top}px`;\n showDragHandle();\n };\n\n window.addEventListener(\"mousemove\", onMouseMove);\n\n hideDragHandle();\n\n view?.dom?.parentElement?.appendChild(dragHandleElement);\n\n return {\n destroy: () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n dragHandleElement?.remove?.();\n dragHandleElement = null;\n }\n };\n },\n props: {\n handleDOMEvents: {\n keydown: () => {\n hideDragHandle();\n },\n mousewheel: () => {\n hideDragHandle();\n },\n // dragging class is used for CSS\n dragstart: (view) => {\n view.dom.classList.add(\"dragging\");\n },\n drop: (view) => {\n view.dom.classList.remove(\"dragging\");\n },\n dragend: (view) => {\n view.dom.classList.remove(\"dragging\");\n }\n }\n }\n });\n}\n\nimport { dropPoint } from \"prosemirror-transform\";\n\nexport function globalDragDropPlugin() {\n let dropCursorElement: HTMLElement | null = null;\n let cleanup: (() => void) | null = null;\n\n function updateDropCursorColor(el: HTMLElement) {\n const isDark = document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n const varName = isDark ? \"--color-surface-accent-300\" : \"--color-surface-accent-600\";\n const color = getComputedStyle(document.documentElement).getPropertyValue(varName).trim();\n el.style.backgroundColor = color || (isDark ? \"#cbd5e1\" : \"#475569\");\n }\n\n return new Plugin({\n view(editorView) {\n dropCursorElement = document.createElement(\"div\");\n dropCursorElement.className = \"prosemirror-dropcursor-block\";\n dropCursorElement.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; height: 2px;\";\n updateDropCursorColor(dropCursorElement);\n\n // Watch for theme changes\n const observer = new MutationObserver(() => {\n if (dropCursorElement) updateDropCursorColor(dropCursorElement);\n });\n observer.observe(document.documentElement, { attributes: true,\nattributeFilter: [\"data-theme\"] });\n\n const removeCursor = () => {\n if (dropCursorElement && dropCursorElement.parentNode) {\n dropCursorElement.parentNode.removeChild(dropCursorElement);\n }\n };\n\n const getBlockInsertionPoint = (event: DragEvent, clampedX: number) => {\n const pos = editorView.posAtCoords({ left: clampedX,\ntop: event.clientY });\n if (!pos) return null;\n\n const $pos = editorView.state.doc.resolve(pos.pos);\n\n let blockDepth = 0;\n for (let i = $pos.depth; i > 0; i--) {\n const name = $pos.node(i).type.name;\n if (name === \"list_item\" || name === \"taskItem\") {\n blockDepth = i;\n break;\n }\n if ($pos.node(i).isBlock && name !== \"bullet_list\" && name !== \"ordered_list\" && name !== \"taskList\") {\n blockDepth = i;\n }\n }\n\n if (blockDepth === 0) return pos.pos;\n\n const nodeBeforePos = $pos.before(blockDepth);\n const nodeAfterPos = $pos.after(blockDepth);\n\n const domNode = editorView.nodeDOM(nodeBeforePos);\n if (domNode instanceof HTMLElement) {\n const rect = domNode.getBoundingClientRect();\n const isTopHalf = event.clientY < rect.top + rect.height / 2;\n return isTopHalf ? nodeBeforePos : nodeAfterPos;\n }\n return pos.pos;\n };\n\n const handleDragOver = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n // If it's a native slice drag (no explicitly captured node from our drag handle)\n // then we bail out here and let ProseMirror native drop logic and native dropcursor handle it\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault(); // browser requires this to allow drop\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const target = getBlockInsertionPoint(event, clampedX);\n if (target === null) {\n removeCursor();\n return;\n }\n\n const $pos = editorView.state.doc.resolve(target);\n\n let rect;\n const before = $pos.nodeBefore;\n const after = $pos.nodeAfter;\n\n if (before || after) {\n const nodeDOM = editorView.nodeDOM(target - (before ? before.nodeSize : 0));\n if (nodeDOM && nodeDOM instanceof HTMLElement) {\n const nodeRect = nodeDOM.getBoundingClientRect();\n let top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after) {\n const afterDOM = editorView.nodeDOM(target);\n if (afterDOM && afterDOM instanceof HTMLElement) {\n top = (top + afterDOM.getBoundingClientRect().top) / 2;\n }\n }\n rect = { left: nodeRect.left,\nright: nodeRect.right,\ntop: top - 1,\nbottom: top + 1 };\n }\n }\n\n if (!rect) {\n const coords = editorView.coordsAtPos(target);\n rect = { left: editorRect.left + 50,\nright: editorRect.right - 50,\ntop: coords.top - 1,\nbottom: coords.top + 1 };\n }\n\n const parent = editorView.dom.offsetParent as HTMLElement;\n let parentLeft = 0;\n let parentTop = 0;\n if (parent && parent !== document.body && getComputedStyle(parent).position !== \"static\") {\n const parentRect = parent.getBoundingClientRect();\n parentLeft = parentRect.left - parent.scrollLeft;\n parentTop = parentRect.top - parent.scrollTop;\n }\n\n if (!dropCursorElement!.parentNode) {\n parent.appendChild(dropCursorElement!);\n }\n\n dropCursorElement!.style.left = `${rect.left - parentLeft}px`;\n dropCursorElement!.style.top = `${rect.top - parentTop}px`;\n dropCursorElement!.style.width = `${rect.right - rect.left}px`;\n };\n\n const handleDrop = (event: DragEvent) => {\n if (!editorView.editable || !editorView.dragging) return;\n\n if (!((editorView as EditorViewWithDrag).dragging as ProseMirrorDragState | null & { node?: unknown })?.node) {\n removeCursor();\n return;\n }\n\n event.preventDefault();\n removeCursor();\n editorView.dom.classList.remove(\"dragging\");\n\n const editorRect = editorView.dom.getBoundingClientRect();\n const clampedX = Math.max(editorRect.left + 10, Math.min(event.clientX, editorRect.right - 10));\n\n const targetPos = getBlockInsertionPoint(event, clampedX);\n if (targetPos === null) return;\n\n const dragging = (editorView as EditorViewWithDrag).dragging;\n if (dragging && dragging.slice) {\n let tr = editorView.state.tr;\n if (dragging.move) {\n const { node } = dragging;\n if (node) {\n node.replace(tr); // exact native ProseMirror delete\n } else {\n tr = tr.deleteSelection();\n }\n }\n\n const mappedTarget = tr.mapping.map(targetPos);\n const beforeInsert = tr.doc;\n\n const { node, slice } = dragging;\n\n if (node && node.node) {\n let nodeToInsert: import(\"prosemirror-model\").Node | import(\"prosemirror-model\").Fragment = node.node;\n const $mapped = tr.doc.resolve(mappedTarget);\n const parentName = $mapped.parent.type.name;\n\n const isTargetList = parentName === \"bullet_list\" || parentName === \"ordered_list\";\n const isTargetTaskList = parentName === \"taskList\";\n\n // 1. Unwrap incoming lists if they don't match the destination perfectly\n if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"list_item\" && !isTargetList) {\n nodeToInsert = nodeToInsert.content;\n } else if (\"type\" in nodeToInsert && nodeToInsert.type.name === \"taskItem\" && !isTargetTaskList) {\n nodeToInsert = nodeToInsert.content;\n }\n\n // 2. Wrap incoming blocks/fragments into exactly the target list type\n const isFragment = !(\"type\" in nodeToInsert);\n const needsWrap = isFragment || (\"type\" in nodeToInsert && nodeToInsert.type.name !== \"list_item\" && nodeToInsert.type.name !== \"taskItem\");\n\n if (needsWrap) {\n if (isTargetList) {\n const listItemType = editorView.state.schema.nodes.list_item;\n if (listItemType) nodeToInsert = listItemType.create(null, nodeToInsert);\n } else if (isTargetTaskList) {\n const taskItemType = editorView.state.schema.nodes.taskItem;\n if (taskItemType) nodeToInsert = taskItemType.create({ checked: false }, nodeToInsert);\n }\n }\n\n // 3. Force insertion. tr.replace slices and splits lists. tr.insert preserves the explicit boundary.\n try {\n tr = tr.insert(mappedTarget, nodeToInsert);\n } catch (e) {\n console.warn(\"Could not insert dragged node exactly at target. Attempting fallback.\", e);\n const point = dropPoint(tr.doc, mappedTarget, slice);\n if (point !== null) {\n tr = tr.replace(point, point, slice);\n }\n }\n } else if (slice) {\n // For generic slices (e.g native image dragging), we MUST use dropPoint\n // so ProseMirror finds a schema-valid depth to insert the node structure natively.\n const point = dropPoint(tr.doc, mappedTarget, slice);\n const finalTarget = point !== null ? point : mappedTarget;\n tr = tr.replace(finalTarget, finalTarget, slice);\n }\n\n if (!tr.doc.eq(beforeInsert)) {\n editorView.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n editorView.focus();\n }\n }\n\n (editorView as EditorViewWithDrag).dragging = null;\n };\n\n const handleDragEnd = () => {\n removeCursor();\n };\n\n window.addEventListener(\"dragover\", handleDragOver, { capture: true });\n window.addEventListener(\"drop\", handleDrop, { capture: true });\n window.addEventListener(\"dragend\", handleDragEnd, { capture: true });\n\n cleanup = () => {\n removeCursor();\n observer.disconnect();\n window.removeEventListener(\"dragover\", handleDragOver, { capture: true });\n window.removeEventListener(\"drop\", handleDrop, { capture: true });\n window.removeEventListener(\"dragend\", handleDragEnd, { capture: true });\n };\n\n return {\n destroy() {\n if (cleanup) cleanup();\n }\n };\n }\n });\n}\n\n\n","import { Plugin, PluginKey, Transaction, EditorState } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { Node as ProseMirrorNode } from \"prosemirror-model\";\n\nexport interface HighlightRange {\n from: number\n to: number\n}\n\ninterface AutocompleteHighlightState {\n highlight?: HighlightRange\n decorationSet?: DecorationSet\n}\n\nexport const highlightDecorationKey = new PluginKey<AutocompleteHighlightState>(\"highlightDecoration\");\n\nfunction buildDecorationSet(highlight: HighlightRange | undefined, doc: ProseMirrorNode) {\n const decorations: Decoration[] = [];\n\n if (highlight) {\n decorations.push(\n Decoration.inline(highlight.from, highlight.to, {\n class: \"dark:bg-surface-accent-700 bg-surface-accent-300\"\n })\n );\n }\n const decorationSet = DecorationSet.create(doc, decorations);\n return decorationSet;\n}\n\n/**\n * Commands to toggle the highlight\n */\nexport const highlightCommands = {\n toggleAutocompleteHighlight: (range?: HighlightRange) => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n const { selection } = state;\n const pos = selection.from;\n\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos,\n type: \"highlightDecoration\",\n remove: false,\n range\n });\n\n dispatch(tr);\n return true;\n },\n\n removeAutocompleteHighlight: () => (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n if (!dispatch) return false;\n\n const tr = state.tr.setMeta(highlightDecorationKey, {\n pos: 0,\n type: \"highlightDecoration\",\n remove: true\n });\n\n dispatch(tr);\n return true;\n }\n}\n\n/**\n * This plugin is used to highlight the current autocomplete suggestion.\n * It allows to set a range and remove it.\n */\nexport const highlightDecorationPlugin = (initialHighlight?: HighlightRange) => {\n return new Plugin<AutocompleteHighlightState>({\n key: highlightDecorationKey,\n state: {\n init: (_, { doc }) => {\n const decorationSet = initialHighlight && doc ? buildDecorationSet(initialHighlight, doc) : DecorationSet.empty;\n return {\n decorationSet,\n highlight: initialHighlight\n };\n },\n apply(transaction, oldState) {\n const action = transaction.getMeta(highlightDecorationKey);\n const highlight = action?.range;\n if (action?.type === \"highlightDecoration\") {\n\n const doc = transaction.doc;\n const { remove } = action;\n\n if (remove) {\n return {\n decorationSet: DecorationSet.empty\n };\n }\n const decorationSet = buildDecorationSet(highlight, doc);\n return {\n decorationSet: decorationSet,\n highlight\n }\n } else {\n return oldState\n }\n }\n },\n props: {\n decorations(state) {\n const autocompleteState = this.getState(state);\n if (autocompleteState?.decorationSet) {\n return autocompleteState.decorationSet\n } else {\n return DecorationSet.empty\n }\n }\n }\n });\n};\n","import {\n inputRules,\n wrappingInputRule,\n textblockTypeInputRule,\n smartQuotes,\n emDash,\n ellipsis,\n InputRule\n} from \"prosemirror-inputrules\";\nimport { schema } from \"../schema\";\nimport { MarkType } from \"prosemirror-model\";\n\nconst blockQuoteRule = wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote);\n\nconst orderedListRule = wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n schema.nodes.ordered_list,\n (match) => ({ order: +match[1] }),\n (match, node) => node.childCount + node.attrs.order === +match[1]\n);\n\nconst bulletListRule = wrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list);\n\nconst taskListRule = wrappingInputRule(/^\\s*(\\[ \\])\\s$/, schema.nodes.task_list);\n\nconst codeBlockRule = textblockTypeInputRule(/^```$/, schema.nodes.code_block);\n\nconst headingRule = textblockTypeInputRule(\n new RegExp(\"^(#{1,6})\\\\s$\"),\n schema.nodes.heading,\n (match) => ({ level: match[1].length })\n);\n\nconst horizontalRuleInputRule = new InputRule(\n /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n (state, match, start, end) => {\n const tr = state.tr;\n tr.replaceWith(start - 1, end, schema.nodes.horizontal_rule.create());\n return tr;\n }\n);\n\nfunction markInputRule(regexp: RegExp, markType: MarkType, getAttrs?: (match: RegExpMatchArray) => Record<string, any>) {\n return new InputRule(regexp, (state, match, start, end) => {\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n const tr = state.tr;\n if (match[1]) {\n const textStart = start + match[0].indexOf(match[1]);\n const textEnd = textStart + match[1].length;\n if (textEnd < end) tr.delete(textEnd, end);\n if (textStart > start) tr.delete(start, textStart);\n end = start + match[1].length;\n }\n tr.addMark(start, end, markType.create(attrs));\n tr.removeStoredMark(markType);\n return tr;\n });\n}\n\nconst strongRule = markInputRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, schema.marks.bold);\nconst emRule = markInputRule(/(?:^|[^*_])(?:\\*|_)([^*_]+)(?:\\*|_)$/, schema.marks.italic);\nconst codeRule = markInputRule(/(?:`)([^`]+)(?:`)$/, schema.marks.code);\nconst strikeRule = markInputRule(/(?:~~)([^~]+)(?:~~)$/, schema.marks.strike);\n\nexport const markdownInputRules = inputRules({\n rules: [\n ...smartQuotes,\n ellipsis,\n emDash,\n blockQuoteRule,\n orderedListRule,\n bulletListRule,\n codeBlockRule,\n headingRule,\n taskListRule,\n horizontalRuleInputRule,\n strongRule,\n emRule,\n codeRule,\n strikeRule\n ]\n});\n","import { Plugin, PluginKey } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { Node } from \"prosemirror-model\";\n\nexport const placeholderPluginKey = new PluginKey(\"placeholderPlugin\");\n\nfunction isNodeEmpty(node: Node) {\n const defaultContent = node.type.createAndFill()\n if (!defaultContent) return true\n return node.content.eq(defaultContent.content)\n}\n\nexport function placeholderPlugin(text: string) {\n return new Plugin({\n key: placeholderPluginKey,\n props: {\n decorations: (state) => {\n const doc = state.doc;\n const decorations: Decoration[] = [];\n const isEmptyDoc = doc.childCount === 1 && doc.firstChild?.isTextblock && doc.firstChild.content.size === 0;\n const { anchor } = state.selection;\n\n doc.descendants((node, pos) => {\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n\n if (isEmpty) {\n // Only show placeholder on the node that contains the cursor.\n // For a single-node empty doc, always show it (editor-empty state).\n const nodeEnd = pos + node.nodeSize;\n const hasCursor = anchor >= pos && anchor <= nodeEnd;\n\n if (!hasCursor && !isEmptyDoc) {\n return false;\n }\n\n const classes = [\"is-empty\"];\n if (isEmptyDoc) {\n classes.push(\"is-editor-empty\");\n }\n\n decorations.push(\n Decoration.node(pos, pos + node.nodeSize, {\n class: classes.join(\" \"),\n \"data-placeholder\": text\n })\n );\n }\n return false; // Stop descending\n });\n\n return DecorationSet.create(doc, decorations);\n }\n }\n });\n}\n","import { keymap } from \"prosemirror-keymap\";\nimport { history, undo, redo } from \"prosemirror-history\";\nimport { slashCommandPlugin } from \"./slashCommandPlugin\";\nimport { dragHandlePlugin, globalDragDropPlugin } from \"../extensions/drag-and-drop\";\nimport { baseKeymap, setBlockType, toggleMark, chainCommands, exitCode, joinUp, joinDown, lift, selectParentNode } from \"prosemirror-commands\";\nimport { highlightDecorationPlugin } from \"../extensions/HighlightDecorationExtension\";\nimport { textLoadingDecorationPlugin } from \"../extensions/TextLoadingDecorationExtension\";\nimport { splitListItem, liftListItem, sinkListItem } from \"prosemirror-schema-list\";\nimport { schema } from \"../schema\";\nimport { Plugin } from \"prosemirror-state\";\nimport { gapCursor } from \"prosemirror-gapcursor\";\nimport { dropCursor } from \"prosemirror-dropcursor\";\nimport { markdownInputRules } from \"./inputrules\";\nimport { placeholderPlugin } from \"./placeholderPlugin\";\nimport { goToNextCell } from \"prosemirror-tables\";\n\nconst customKeymap = {\n \"Tab\": goToNextCell(1),\n \"Shift-Tab\": goToNextCell(-1),\n \"Mod-z\": undo,\n \"Mod-y\": redo,\n \"Shift-Mod-z\": redo,\n \"Mod-b\": toggleMark(schema.marks.bold),\n \"Mod-i\": toggleMark(schema.marks.italic),\n \"Mod-u\": toggleMark(schema.marks.underline),\n \"Mod-Shift-s\": toggleMark(schema.marks.strike),\n \"Mod-e\": toggleMark(schema.marks.code),\n \"Mod-Shift-h\": toggleMark(schema.marks.highlight),\n\n \"Enter\": splitListItem(schema.nodes.list_item),\n \"Shift-Enter\": splitListItem(schema.nodes.task_item),\n\n \"Mod-[\": liftListItem(schema.nodes.list_item),\n \"Mod-]\": sinkListItem(schema.nodes.list_item),\n\n \"Shift-Mod-8\": setBlockType(schema.nodes.bullet_list),\n \"Shift-Mod-9\": setBlockType(schema.nodes.ordered_list),\n\n \"Mod-Alt-1\": setBlockType(schema.nodes.heading, { level: 1 }),\n \"Mod-Alt-2\": setBlockType(schema.nodes.heading, { level: 2 }),\n \"Mod-Alt-3\": setBlockType(schema.nodes.heading, { level: 3 }),\n\n \"Mod-Alt-0\": setBlockType(schema.nodes.paragraph)\n};\n\nexport const getCorePlugins = (): Plugin[] => [\n history(),\n keymap(customKeymap),\n keymap(baseKeymap),\n globalDragDropPlugin(),\n gapCursor(),\n slashCommandPlugin(),\n dragHandlePlugin(),\n highlightDecorationPlugin(),\n textLoadingDecorationPlugin(),\n markdownInputRules,\n placeholderPlugin(\"Press '/' for commands\")\n];\n","import React, { ReactNode } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\n\nexport interface ReactNodeViewProps {\n node: ProseMirrorNode;\n view: EditorView;\n getPos: () => number | undefined;\n}\n\nexport type ReactNodeViewComponent = React.FC<ReactNodeViewProps>;\n\n/**\n * A utility class that implements the ProseMirror NodeView interface but delegates rendering\n * to a React component.\n * Note: This uses createRoot, so it does not automatically inherit React Contexts.\n * If contexts are needed, wrap them manually or use a portal-based approach instead.\n */\nexport class ReactNodeView implements NodeView {\n public node: ProseMirrorNode;\n public view: EditorView;\n public getPos: () => number | undefined;\n public dom: HTMLElement;\n public contentDOM?: HTMLElement;\n private root: Root;\n private Component: ReactNodeViewComponent;\n\n constructor(\n node: ProseMirrorNode,\n view: EditorView,\n getPos: () => number | undefined,\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n contentDOMElement?: HTMLElement\n ) {\n this.node = node;\n this.view = view;\n this.getPos = getPos;\n this.Component = Component;\n\n this.dom = document.createElement(as);\n if (className) this.dom.className = className;\n if (contentDOMElement) {\n this.contentDOM = contentDOMElement;\n }\n\n const container = document.createElement(\"div\");\n // We render React next to contentDOM\n this.dom.appendChild(container);\n if (this.contentDOM) {\n this.dom.appendChild(this.contentDOM);\n }\n\n this.root = createRoot(container);\n this.render();\n }\n\n private render() {\n this.root.render(\n <this.Component\n node={this.node}\n view={this.view}\n getPos={this.getPos}\n />\n );\n }\n\n update(node: ProseMirrorNode): boolean {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n this.render();\n return true;\n }\n\n destroy() {\n this.root.unmount();\n }\n\n ignoreMutation(mutation: MutationRecord | { type: \"selection\"; target: Node }) {\n if (!this.contentDOM) {\n return true;\n }\n return !this.contentDOM.contains(mutation.target);\n }\n}\n","import React from \"react\";\nimport { Checkbox, Label } from \"@rebasepro/ui\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\n\nexport const TaskItemComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n const checked = node.attrs.checked;\n\n const handleCheckedChange = (isChecked: boolean) => {\n const pos = getPos();\n if (typeof pos !== \"number\") return;\n\n view.dispatch(\n view.state.tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n checked: isChecked\n })\n );\n };\n\n return (\n <Label contentEditable={false} className=\"flex items-start select-none px-1 cursor-pointer\">\n <Checkbox\n checked={checked}\n onCheckedChange={handleCheckedChange}\n padding={false}\n size=\"small\"\n />\n </Label>\n );\n};\n","import React from \"react\";\nimport { ReactNodeViewProps } from \"./ReactNodeView\";\nimport { cls, defaultBorderMixin } from \"@rebasepro/ui\";\n\nexport const ImageComponent: React.FC<ReactNodeViewProps> = ({ node, view, getPos }) => {\n // If the node is selected\n const selected = view.state.selection.from === getPos();\n\n return (\n <img\n src={node.attrs.src}\n alt={node.attrs.alt || \"\"}\n title={node.attrs.title || \"\"}\n className={cls(\n \"rounded-lg max-w-full !m-0\",\n selected ? \"\" : \"\"\n )}\n />\n );\n};\n","import { Node as ProseMirrorNode } from \"prosemirror-model\";\nimport { EditorView, NodeView } from \"prosemirror-view\";\nimport { ReactNodeView, ReactNodeViewComponent } from \"./ReactNodeView\";\nimport { TaskItemComponent } from \"./TaskItemComponent\";\nimport { ImageComponent } from \"./ImageComponent\";\n\nfunction createReactNodeView(\n Component: ReactNodeViewComponent,\n as = \"div\",\n className?: string,\n createContentDOM?: () => HTMLElement\n) {\n return (node: ProseMirrorNode, view: EditorView, getPos: () => number | undefined): NodeView => {\n const contentDOM = createContentDOM ? createContentDOM() : undefined;\n return new ReactNodeView(node, view, getPos, Component, as, className, contentDOM);\n };\n}\n\nexport const nodeViews = {\n task_item: createReactNodeView(\n TaskItemComponent,\n \"li\",\n \"flex items-start\",\n () => {\n const dom = document.createElement(\"div\");\n dom.className = \"flex-grow min-w-0\";\n return dom;\n }\n ),\n image: createReactNodeView(\n ImageComponent,\n \"span\",\n \"inline-block w-full\"\n )\n};\n","import { useState, useEffect, useRef, useLayoutEffect } from \"react\";\nimport { EditorState, Transaction, Plugin } from \"prosemirror-state\";\nimport { EditorView } from \"prosemirror-view\";\nimport { schema } from \"../schema\";\nimport { getCorePlugins } from \"../plugins\";\nimport { parser } from \"../markdown\";\nimport { nodeViews } from \"../nodeViews\";\nimport { createDropImagePlugin } from \"../extensions/Image\";\nimport { columnResizing, tableEditing } from \"prosemirror-tables\";\n\nconst trailingNodePlugin = new Plugin({\n appendTransaction: (_, oldState, newState) => {\n const doc = newState.doc;\n if (doc.lastChild && doc.lastChild.type.name !== \"paragraph\") {\n return newState.tr.insert(doc.content.size, newState.schema.nodes.paragraph.create());\n }\n return null;\n }\n});\n\ninterface UseProseMirrorProps {\n initialContent?: string | any;\n editable?: boolean;\n handleImageUpload?: (file: File) => Promise<string>;\n}\n\nexport function useProseMirror({ initialContent, editable = true, handleImageUpload }: UseProseMirrorProps) {\n const plugins = [\n ...getCorePlugins(),\n columnResizing(),\n tableEditing(),\n trailingNodePlugin\n ];\n if (handleImageUpload) {\n plugins.push(createDropImagePlugin(handleImageUpload));\n }\n\n const defaultState = EditorState.create({\n doc: typeof initialContent === \"string\"\n ? parser.parse(initialContent)\n : initialContent\n ? schema.nodeFromJSON(initialContent)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]),\n schema,\n plugins\n });\n\n const [state, setState] = useState<EditorState>(defaultState);\n const [view, setView] = useState<EditorView | null>(null);\n\n const editorRef = useRef<HTMLDivElement>(null);\n const viewRef = useRef<EditorView | null>(null);\n\n useLayoutEffect(() => {\n if (!editorRef.current) return;\n\n const editorView = new EditorView(editorRef.current, {\n state: defaultState,\n editable: () => editable,\n dispatchTransaction: (tr: Transaction) => {\n const newState = editorView.state.apply(tr);\n editorView.updateState(newState);\n setState(newState);\n },\n nodeViews: nodeViews,\n transformPastedHTML(html: string) {\n // Strip inline styles and classes from pasted HTML so we don't\n // get textStyle marks (color, font-size, etc.) that have no\n // markdown representation. This makes paste look consistent.\n const div = document.createElement(\"div\");\n div.innerHTML = html;\n div.querySelectorAll(\"*\").forEach((el) => {\n el.removeAttribute(\"style\");\n el.removeAttribute(\"class\");\n el.removeAttribute(\"color\");\n el.removeAttribute(\"bgcolor\");\n el.removeAttribute(\"face\");\n });\n return div.innerHTML;\n }\n });\n\n // Patch posAtCoords to allow dropping/interacting anywhere horizontally natively\n const originalPosAtCoords = editorView.posAtCoords.bind(editorView);\n editorView.posAtCoords = (coords: { left: number, top: number }) => {\n const res = originalPosAtCoords(coords);\n if (!res) {\n const editorRect = editorView.dom.getBoundingClientRect();\n // If it's literally anywhere to the left of the actual ProseMirror content block\n if (coords.left <= editorRect.left) {\n const probeX = editorRect.left + Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n // Or if it's anywhere to the right\n if (coords.left >= editorRect.right) {\n const probeX = editorRect.right - Math.min(60, editorRect.width / 4);\n return originalPosAtCoords({ left: probeX,\ntop: coords.top });\n }\n }\n return res;\n };\n\n viewRef.current = editorView;\n setView(editorView);\n\n return () => {\n editorView.destroy();\n viewRef.current = null;\n };\n }, []);\n\n // Effect to update editable status without re-mounting\n useEffect(() => {\n if (viewRef.current) {\n viewRef.current.setProps({ editable: () => editable });\n }\n }, [editable]);\n\n return {\n state,\n view,\n editorRef\n };\n}\n","\"use client\";\nimport React, { useEffect, useState, useRef, useMemo } from \"react\";\nimport { EditorState } from \"prosemirror-state\";\nimport { cls, defaultBorderMixin, Separator, useInjectStyles, TextareaAutosize } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { EditorBubble, ImageBubble, SlashCommandMenu, TableBubble, type JSONContent } from \"./components\";\nimport { NodeSelector } from \"./selectors/node-selector\";\nimport { LinkSelector } from \"./selectors/link-selector\";\nimport { TextButtons } from \"./selectors/text-buttons\";\nimport { removeClassesFromJson } from \"./utils/remove_classes\";\nimport { parser, serializer } from \"./markdown\";\nimport { EditorAIController } from \"./types\";\nimport { useProseMirror } from \"./hooks/useProseMirror\";\nimport { ProseMirrorContext } from \"./hooks/useProseMirrorContext\";\nimport { highlightCommands } from \"./extensions/HighlightDecorationExtension\";\nimport { schema } from \"./schema\";\n\nexport type CustomEditorComponent = {\n name: string,\n component: React.FC\n};\n\nexport interface MarkdownEditorConfig {\n html?: boolean;\n transformPastedText?: boolean;\n}\n\nexport type RebaseEditorTextSize = \"sm\" | \"base\" | \"lg\";\n\nexport type RebaseEditorProps = {\n content?: JSONContent | string,\n onMarkdownContentChange?: (content: string) => void,\n onJsonContentChange?: (content: JSONContent | null) => void,\n onHtmlContentChange?: (content: string) => void,\n handleImageUpload: (file: File) => Promise<string>,\n version?: number,\n textSize?: RebaseEditorTextSize,\n highlight?: { from: number, to: number },\n aiController?: EditorAIController,\n customComponents?: CustomEditorComponent[];\n disabled?: boolean;\n markdownConfig?: MarkdownEditorConfig;\n};\n\nconst proseClasses = {\n \"sm\": \"prose-sm\",\n \"base\": \"prose-base\",\n \"lg\": \"prose-lg\"\n}\n\nexport const RebaseEditor = ({\n content,\n onJsonContentChange,\n onHtmlContentChange,\n onMarkdownContentChange,\n version,\n textSize = \"base\",\n highlight,\n handleImageUpload,\n aiController,\n disabled,\n markdownConfig\n}: RebaseEditorProps) => {\n const { t } = useTranslation();\n\n const [openNode, setOpenNode] = useState(false);\n const [openLink, setOpenLink] = useState(false);\n\n const [isMarkdownMode, setIsMarkdownMode] = useState(false);\n const [internalMarkdown, setInternalMarkdown] = useState<string>(\"\");\n\n useEffect(() => {\n if (!isMarkdownMode) return;\n const timeout = setTimeout(() => {\n if (callbacksRef.current.onMarkdownContentChange) {\n callbacksRef.current.onMarkdownContentChange(internalMarkdown);\n }\n }, 250);\n return () => clearTimeout(timeout);\n }, [internalMarkdown, isMarkdownMode]);\n\n const handleToggleMarkdown = () => {\n if (!isMarkdownMode) {\n if (view) {\n setInternalMarkdown(serializer.serialize(view.state.doc));\n }\n setIsMarkdownMode(true);\n } else {\n if (view) {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n }\n setIsMarkdownMode(false);\n }\n };\n\n const handleMarkdownChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInternalMarkdown(e.target.value);\n };\n\n const handleMarkdownBlur = () => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n onMarkdownContentChange(internalMarkdown);\n }\n if (onJsonContentChange) {\n try {\n const newDoc = parser.parse(internalMarkdown);\n if (newDoc) {\n onJsonContentChange(removeClassesFromJson(newDoc.toJSON()) as JSONContent);\n }\n } catch (e) {\n console.warn(\"Could not parse markdown to JSON\", e);\n }\n }\n };\n\n useInjectStyles(\"Editor\", cssStyles);\n\n const callbacksRef = useRef({ onMarkdownContentChange,\nonJsonContentChange });\n useEffect(() => {\n callbacksRef.current = { onMarkdownContentChange,\nonJsonContentChange };\n }, [onMarkdownContentChange, onJsonContentChange]);\n\n const flushChanges = (currentState: EditorState) => {\n const { onMarkdownContentChange, onJsonContentChange } = callbacksRef.current;\n if (onMarkdownContentChange) {\n try {\n const markdown = serializer.serialize(currentState.doc);\n onMarkdownContentChange(markdown);\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not serialize editor state to markdown:\", e);\n }\n }\n if (onJsonContentChange) {\n const jsonContent = removeClassesFromJson(currentState.doc.toJSON()) as JSONContent;\n onJsonContentChange(jsonContent);\n }\n };\n\n const { state, view, editorRef } = useProseMirror({\n initialContent: content,\n editable: !disabled,\n handleImageUpload\n });\n\n // When `version` changes externally (e.g. form discard/reset), re-parse the\n // `content` prop and replace the ProseMirror document so the editor reflects\n // the reverted value.\n const versionRef = useRef(version);\n useEffect(() => {\n if (versionRef.current === version) return; // skip initial render\n versionRef.current = version;\n if (!view) return;\n try {\n const newDoc = typeof content === \"string\"\n ? parser.parse(content ?? \"\")\n : content\n ? schema.nodeFromJSON(content)\n : schema.node(\"doc\", null, [schema.node(\"paragraph\")]);\n if (newDoc) {\n const tr = view.state.tr.replaceWith(0, view.state.doc.content.size, newDoc.content);\n view.dispatch(tr);\n }\n } catch (e) {\n console.warn(\"[RebaseEditor] Could not reset editor content:\", e);\n }\n // Also reset raw-markdown textarea if the user is in source mode\n if (isMarkdownMode) {\n setInternalMarkdown(typeof content === \"string\" ? content : \"\");\n }\n // Reset the settling window so the replacement dispatch above is NOT\n // treated as a user edit (which would fire onChange back to the form).\n mountTimeRef.current = Date.now();\n hasUserEditedRef.current = false;\n }, [version]);\n\n const doc = state?.doc;\n // Use a time-based settling window instead of a single-skip flag.\n // The trailingNodePlugin fires appendTransaction on mount (adding a trailing\n // paragraph), which creates a second doc change after the initial parse.\n // A single-skip flag misses that second change. Instead, we skip ALL doc\n // changes within the first 500ms after the view is created.\n const mountTimeRef = useRef(Date.now());\n const hasUserEditedRef = useRef(false);\n useEffect(() => {\n if (!state) return;\n // Skip all doc changes during the initial settling window (500ms).\n // This covers both the initial parse AND the trailingNodePlugin's\n // appendTransaction that adds a trailing paragraph.\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500 && !hasUserEditedRef.current) {\n return;\n }\n hasUserEditedRef.current = true;\n const timeout = setTimeout(() => {\n flushChanges(state);\n }, 250);\n return () => clearTimeout(timeout);\n }, [doc]);\n\n useEffect(() => {\n if (!view) return;\n const dom = view.dom;\n const handleBlur = () => {\n // Don't flush during the initial settling window — the editor\n // hasn't been interacted with yet, and the serialized output\n // may differ from the input due to parse→serialize normalization.\n if (!hasUserEditedRef.current) {\n const elapsed = Date.now() - mountTimeRef.current;\n if (elapsed < 500) return;\n }\n flushChanges(view.state);\n };\n dom.addEventListener(\"blur\", handleBlur);\n return () => dom.removeEventListener(\"blur\", handleBlur);\n }, [view]);\n\n\n useEffect(() => {\n if (view) {\n if (highlight) {\n highlightCommands.toggleAutocompleteHighlight(highlight)(view.state, view.dispatch);\n } else {\n highlightCommands.removeAutocompleteHighlight()(view.state, view.dispatch);\n }\n }\n }, [highlight?.from, highlight?.to]);\n\n const proseClass = proseClasses[textSize];\n\n\n return (\n <div className=\"relative min-h-[200px] w-full\">\n <button\n type=\"button\"\n onClick={handleToggleMarkdown}\n title={isMarkdownMode ? \"Switch to Visual Editor\" : \"Switch to Markdown\"}\n className=\"absolute top-2 right-2 z-10 px-2 py-1 text-xs font-medium text-surface-400 hover:text-surface-700 dark:text-surface-600 dark:hover:text-surface-300 transition-colors opacity-50 hover:opacity-100 bg-transparent rounded\"\n >\n {isMarkdownMode ? \"Visual\" : \"Markdown\"}\n </button>\n\n <ProseMirrorContext.Provider value={useMemo(() => ({ state,\nview }), [state, view])}>\n\n <div style={{ display: isMarkdownMode ? \"none\" : \"block\" }}>\n <div\n ref={editorRef}\n className={cls(\"relative prose dark:prose-invert\", proseClass, \"prose-headings:font-title prose-headings:font-normal prose-strong:font-semibold prose-code:font-normal prose-blockquote:font-normal prose-a:font-normal font-default focus:outline-none max-w-full px-12 py-4\")}\n />\n\n {view && (\n <>\n <EditorBubble\n options={{\n placement: \"top\",\n offset: 6\n }}\n className={cls(\"flex w-fit max-w-[90vw] h-10 overflow-hidden rounded border bg-white dark:bg-surface-800 shadow\", defaultBorderMixin)}\n >\n <NodeSelector portalContainer={editorRef.current} open={openNode} onOpenChange={setOpenNode}/>\n <Separator orientation=\"vertical\"/>\n <LinkSelector open={openLink} onOpenChange={setOpenLink}/>\n <Separator orientation=\"vertical\"/>\n <TextButtons/>\n </EditorBubble>\n\n <ImageBubble\n options={{\n placement: \"bottom\",\n offset: 6\n }}\n />\n <TableBubble/>\n </>\n )}\n\n <SlashCommandMenu upload={handleImageUpload} aiController={aiController}/>\n </div>\n\n {isMarkdownMode && (\n <TextareaAutosize\n value={internalMarkdown}\n onChange={handleMarkdownChange}\n onBlur={handleMarkdownBlur}\n className={cls(\n \"w-full h-full min-h-[200px] px-12 py-4 bg-transparent resize-none font-mono focus:ring-0\",\n proseClass\n )}\n style={{\n tabSize: 4,\n outline: \"none\",\n border: \"none\",\n boxShadow: \"none\"\n }}\n />\n )}\n\n </ProseMirrorContext.Provider>\n </div>\n );\n};\n\n\nconst cssStyles = `\n.ProseMirror {\n box-shadow: none !important;\n}\n.ProseMirror .is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n.ProseMirror .is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: rgb(100 116 139); //500\n pointer-events: none;\n height: 0;\n}\n\n[data-theme=\"dark\"] {\n .ProseMirror .is-empty::before {\n color: rgb(100 116 139); //500\n }\n}\n\n.is-empty {\n cursor: text;\n color: rgb(100 116 139); //500\n}\n\n.ProseMirror img {\n transition: filter 0.1s ease-in-out;\n}\n.ProseMirror img:hover {\n cursor: pointer;\n filter: brightness(90%);\n}\n.ProseMirror img.ProseMirror-selectednode {\n filter: brightness(90%);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important;\n}\n\nul[data-type=\"taskList\"] li > label {\n margin-right: 0.2rem;\n user-select: none;\n}\n@media screen and (max-width: 768px) {\n ul[data-type=\"taskList\"] li > label {\n margin-right: 0.5rem;\n }\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n background-color: rgb(30 41 59);\n border: 2px solid #666;\n}\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] ul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(71 85 105); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"] {\n -webkit-appearance: none;\n appearance: none;\n background-color: white;\n margin: 0;\n cursor: pointer;\n width: 1.2em;\n height: 1.2em;\n position: relative;\n top: 5px;\n border: 2px solid #777;\n border-radius: 0.25em;\n margin-right: 0.3rem;\n display: grid;\n place-content: center;\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:hover { background-color: rgb(241 245 249); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:active { background-color: rgb(226 232 240); }\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]::before {\n content: \"\";\n width: 0.65em;\n height: 0.65em;\n transform: scale(0);\n transition: 120ms transform ease-in-out;\n box-shadow: inset 1em 1em;\n transform-origin: center;\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);\n}\nul[data-type=\"taskList\"] li > label input[type=\"checkbox\"]:checked::before { transform: scale(1); }\n\n[data-theme=\"dark\"] {\n ul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(226 232 240);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n }\n}\nul[data-type=\"taskList\"] li[data-checked=\"true\"] > div > p {\n color: rgb(51 65 85);\n text-decoration: line-through;\n text-decoration-thickness: 2px;\n}\n.tippy-box { max-width: 400px !important; }\n\n.ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(219 234 254);\n transition: background-color 0.2s;\n box-shadow: none;\n}\n[data-theme=\"dark\"] .ProseMirror:not(.dragging) .ProseMirror-selectednode {\n background-color: rgb(51 65 85);\n}\n.prose-base table p { margin: 0; }\n\n.drag-handle {\n position: absolute;\n opacity: 1;\n transition: opacity ease-in 0.2s;\n border-radius: 0.25rem;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10' style='fill: rgba(128, 128, 128, 0.9)'%3E%3Cpath d='M3,2 C2.44771525,2 2,1.55228475 2,1 C2,0.44771525 2.44771525,0 3,0 C3.55228475,0 4,0.44771525 4,1 C4,1.55228475 3.55228475,2 3,2 Z M3,6 C2.44771525,6 2,5.55228475 2,5 C2,4.44771525 2.44771525,4 3,4 C3.55228475,4 4,4.44771525 4,5 C4,5.55228475 3.55228475,6 3,6 Z M3,10 C2.44771525,10 2,9.55228475 2,9 C2,8.44771525 2.44771525,8 3,8 C3.55228475,8 4,8.44771525 4,9 C4,9.55228475 3.55228475,10 3,10 Z M7,2 C6.44771525,2 6,1.55228475 6,1 C6,0.44771525 6.44771525,0 7,0 C7.55228475,0 8,0.44771525 8,1 C8,1.55228475 7.55228475,2 7,2 Z M7,6 C6.44771525,6 6,5.55228475 6,5 C6,4.44771525 6.44771525,4 7,4 C7.55228475,4 8,4.44771525 8,5 C8,5.55228475 7.55228475,6 7,6 Z M7,10 C6.44771525,10 6,9.55228475 6,9 C6,8.44771525 6.44771525,8 7,8 C7,8.44771525 7,9 7,9 C7,9.55228475 7,10 7,10 Z'%3E%3C/path%3E%3C/svg%3E\");\n background-size: calc(0.5em + 0.375rem) calc(0.5em + 0.375rem);\n background-repeat: no-repeat;\n background-position: center;\n width: 1.2rem;\n height: 1.5rem;\n z-index: 100;\n cursor: grab;\n}\n.drag-handle::before {\n content: '';\n position: absolute;\n top: -10px;\n bottom: -10px;\n left: -20px; \n right: 0px;\n z-index: -1;\n}\n.drag-handle:hover { background-color: rgb(241 245 249); transition: background-color 0.2s; }\n.drag-handle:active { background-color: rgb(226 232 240); transition: background-color 0.2s; }\n.drag-handle.hide { opacity: 0; pointer-events: none; }\n@media screen and (max-width: 600px) { .drag-handle { display: none; pointer-events: none; } }\n[data-theme=\"dark\"] .drag-handle:hover { background-color: rgb(51 65 85); }\n[data-theme=\"dark\"] .drag-handle:active { background-color: rgb(51 65 85); }\n.prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-600);\n}\n[data-theme=\"dark\"] .prosemirror-dropcursor-block {\n background-color: var(--color-surface-accent-300);\n}\n\n.ProseMirror table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n width: 100%;\n margin: 1em 0;\n overflow: hidden;\n border-radius: 0.375rem;\n border: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror table {\n border-color: #374151;\n}\n\n.ProseMirror td, .ProseMirror th {\n min-width: 1em;\n padding: 8px 10px;\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n border-right: 1px solid #e5e7eb;\n border-bottom: 1px solid #e5e7eb;\n}\n[data-theme=\"dark\"] .ProseMirror td, [data-theme=\"dark\"] .ProseMirror th {\n border-right-color: #374151;\n border-bottom-color: #374151;\n}\n\n.ProseMirror tr:last-child td, .ProseMirror tr:last-child th {\n border-bottom: none;\n}\n.ProseMirror th:last-child, .ProseMirror td:last-child {\n border-right: none;\n}\n\n.ProseMirror td {\n background-color: transparent;\n}\n\n.ProseMirror th {\n font-weight: 600;\n text-align: left;\n background-color: #f3f4f6;\n color: #374151;\n}\n[data-theme=\"dark\"] .ProseMirror td {\n background-color: transparent;\n}\n[data-theme=\"dark\"] .ProseMirror th {\n background-color: rgba(255, 255, 255, 0.05);\n color: #d1d5db;\n}\n`;\n"],"names":["ProseMirrorContext","createContext","state","view","useProseMirrorContext","useContext","EditorBubble","forwardRef","t0","ref","$","_c","children","options","className","menuRef","useRef","show","setShow","useState","t1","t2","timer","setTimeout","selection","empty","isImage","doc","nodesBetween","from","to","node","type","name","NodeSelection","clearTimeout","useEffect","t3","offset","placement","current","start","coordsAtPos","end","virtualEl","getBoundingClientRect","top","Math","min","bottom","max","left","right","width","height","x","y","cleanup","autoUpdate","t4","computePosition","middleware","flip","shift","strategy","then","t5","Object","assign","style","visibility","Symbol","for","position","zIndex","t6","_temp","displayName","e_0","e","preventDefault","EditorBubbleItem","asChild","onSelect","rest","Comp","Slot","SlashCommandPluginKey","PluginKey","slashCommandPlugin","Plugin","key","init","active","apply","tr","value","oldState","newState","meta","getMeta","undefined","TextSelection","$anchor","parent","textBefore","textBetween","parentOffset","match","dismissed","query","pos","length","range","onFileRead","readerEvent","upload","image","schema","plugin","plugins","find","p","ImagePluginKey","console","error","decoId","random","toString","substring","placeholder","document","createElement","imageElement","setAttribute","defaultBorderMixin","src","target","result","appendChild","deco","Decoration","widget","id","decorationSet","getState","add","dispatch","setMeta","debug","replacePlaceholder","currentDecos","foundDecos","spec","warn","currentPos","imageNode","nodes","create","replaceWith","remove","preloader","Image","onload","onerror","createDropImagePlugin","DecorationSet","old","map","mapping","props","handleDOMEvents","dragover","event","dataTransfer","types","includes","drop","files","Array","images","filter","file","test","forEach","posAtCoords","clientX","clientY","reader","FileReader","readAsDataURL","handlePaste","html","clipboardData","getData","items","anyImageFound","item","startsWith","getAsFile","decorations","loadingDecorationKey","textLoadingCommands","toggleLoadingDecoration","loadingHtml","removeLoadingDecoration","textLoadingDecorationPlugin","hasDecoration","action","decoration","container","innerHTML","span","innerText","suggestionItems","title","description","searchTerms","icon","iconSize","small","command","deleteRange","setBlockType","paragraph","wrapInList","task_list","heading","level","bullet_list","ordered_list","wrapIn","blockquote","code_block","input","accept","onchange","f","click","aiController","setSubView","autocompleteSuggestionItem","Error","textBeforeCursor","textAfterCursor","content","size","buffer","autocomplete","delta","unescapedResult","replace","isHTML","parsedDoc","div","DOMParser","fromSchema","parse","parser","insertText","SlashCommandMenu","selectedIndex","setSelectedIndex","subView","tableGridCoords","setTableGridCoords","r","c","pluginState","isActive","filteredItems","React","useMemo","availableItems","push","inTitle","toLowerCase","some","term","handleKeyDown","stopPropagation","stopImmediatePropagation","prev","tableNode","createTableNode","setSelection","focus","window","addEventListener","capture","removeEventListener","itemRefs","scrollIntoView","block","cls","rows","cols","index","el","rowsCount","colsCount","cells","isHeader","cellType","table_header","table_cell","cell","createAndFill","row","table_row","Fragment","table","TableGridPicker","hoveredRow","hoveredCol","onHover","_","__0","ImageBubble","t","useTranslation","alt","setAlt","setTitle","imagePos","setImagePos","handleContextMenu","posInfo","inside","nodeAt","attrs","dom","handleMousedown","contains","button","newAlt","newTitle","node_0","tr_0","setNodeMarkup","handleSave","t7","t8","t9","e_3","t10","t11","t12","e_4","t13","t14","e_2","currentTarget","isSelectionInTable","$from","d","depth","TableBubble","isDestroyed","cmd","executeCommand","addRowBefore","t15","addRowAfter","t16","t17","t18","t19","t20","deleteRow","t21","t22","t23","t24","t25","t26","addColumnBefore","t27","t28","t29","t30","t31","addColumnAfter","t32","t33","t34","t35","t36","deleteColumn","t37","t38","t39","t40","t41","t42","deleteTable","t43","t44","t45","t46","isMarkActive","isInSet","storedMarks","marks","rangeHasMark","isNodeActive","keys","every","getMarkAttributes","mark","found","m","setMark","$cursor","ranges","addStoredMark","i","$to","addMark","unsetMark","markStart","markEnd","currentMarkStart","child","childStart","childEnd","nodeSize","removeMark","removeStoredMark","labelKey","TypeIcon","Heading1Icon","Heading2Icon","Heading3Icon","CheckSquareIcon","task_item","ListIcon","ListOrderedIcon","QuoteIcon","CodeIcon","NodeSelector","open","onOpenChange","portalContainer","T0","T1","activeItem","pop","Popover","Button","item_0","smallest","isValidUrl","url","URL","getUrlFromString","str","LinkSelector","inputRef","link","href","handleSubmit","handleRemoveLink","focusedDisabled","TextButtons","_temp2","BoldIcon","_temp3","_temp4","ItalicIcon","_temp5","_temp6","UnderlineIcon","_temp7","_temp8","StrikethroughIcon","_temp9","_temp0","s","bold","s_0","toggleMark","s_1","italic","s_2","dispatch_0","s_3","underline","s_4","dispatch_1","s_5","strike","s_6","dispatch_2","s_7","code","s_8","dispatch_3","removeClassesFromJson","jsonObj","isArray","obj","class","serializeForClipboard","slice","someProp","context","openStart","openEnd","childCount","firstChild","defaultAttrs","serializer","DOMSerializer","detachedDoc","wrap","serializeFragment","needsWrap","wrappers","nodeType","wrapMap","nodeName","wrapper","JSON","stringify","text","thead","tbody","tfoot","caption","colgroup","col","td","th","_detachedDoc","implementation","createHTMLDocument","absoluteRect","element","data","ancestor","parentElement","getComputedStyle","ancestorRect","nodeDOMAtCoords","coords","editorRect","blockSelector","elem","elementFromPoint","closest","textContent","trim","li","probeX","probeElem","probeBlock","nodePosAtDOM","posAtDOM","$pos","resolve","before","dragHandlePlugin","dragHandleWidth","handleDragStart","Element","nodePos","draggedNodeSelection","clearData","setData","effectAllowed","setDragImage","dragging","move","handleClick","classList","dragHandleElement","hideDragHandle","opacity","pointerEvents","showDragHandle","draggable","dataset","dragHandle","onMouseMove","editable","compStyle","lineHeight","parseInt","paddingTop","rect","matches","destroy","keydown","mousewheel","dragstart","dragend","globalDragDropPlugin","dropCursorElement","updateDropCursorColor","isDark","documentElement","getAttribute","varName","color","getPropertyValue","backgroundColor","editorView","cssText","observer","MutationObserver","observe","attributes","attributeFilter","removeCursor","parentNode","removeChild","getBlockInsertionPoint","clampedX","blockDepth","isBlock","nodeBeforePos","nodeAfterPos","after","domNode","nodeDOM","HTMLElement","isTopHalf","handleDragOver","nodeBefore","nodeAfter","nodeRect","afterDOM","offsetParent","parentLeft","parentTop","body","parentRect","scrollLeft","scrollTop","handleDrop","targetPos","deleteSelection","mappedTarget","beforeInsert","nodeToInsert","$mapped","parentName","isTargetList","isTargetTaskList","isFragment","listItemType","list_item","taskItemType","taskItem","checked","insert","point","dropPoint","finalTarget","eq","handleDragEnd","disconnect","highlightDecorationKey","buildDecorationSet","highlight","inline","highlightCommands","toggleAutocompleteHighlight","removeAutocompleteHighlight","highlightDecorationPlugin","initialHighlight","transaction","autocompleteState","blockQuoteRule","wrappingInputRule","orderedListRule","order","bulletListRule","taskListRule","codeBlockRule","textblockTypeInputRule","headingRule","RegExp","horizontalRuleInputRule","InputRule","horizontal_rule","markInputRule","regexp","markType","getAttrs","Function","textStart","indexOf","textEnd","delete","strongRule","emRule","codeRule","strikeRule","markdownInputRules","inputRules","rules","smartQuotes","ellipsis","emDash","placeholderPluginKey","isNodeEmpty","defaultContent","placeholderPlugin","isEmptyDoc","isTextblock","anchor","descendants","isEmpty","isLeaf","nodeEnd","hasCursor","classes","join","customKeymap","goToNextCell","undo","redo","splitListItem","liftListItem","sinkListItem","getCorePlugins","history","keymap","baseKeymap","gapCursor","ReactNodeView","getPos","contentDOM","root","Component","constructor","as","contentDOMElement","createRoot","render","update","unmount","ignoreMutation","mutation","TaskItemComponent","isChecked","handleCheckedChange","ImageComponent","selected","createReactNodeView","createContentDOM","nodeViews","trailingNodePlugin","appendTransaction","lastChild","useProseMirror","initialContent","handleImageUpload","columnResizing","tableEditing","EditorState","nodeFromJSON","defaultState","setState","setView","editorRef","viewRef","EditorView","dispatchTransaction","updateState","transformPastedHTML","querySelectorAll","originalPosAtCoords","bind","res","probeX_0","useLayoutEffect","setProps","removeAttribute","proseClasses","RebaseEditor","onJsonContentChange","onHtmlContentChange","onMarkdownContentChange","version","textSize","disabled","markdownConfig","openNode","setOpenNode","openLink","setOpenLink","isMarkdownMode","setIsMarkdownMode","internalMarkdown","setInternalMarkdown","timeout","callbacksRef","handleToggleMarkdown","serialize","newDoc","handleMarkdownChange","handleMarkdownBlur","toJSON","useInjectStyles","cssStyles","flushChanges","currentState","markdown","jsonContent","versionRef","mountTimeRef","Date","now","hasUserEditedRef","elapsed","handleBlur","proseClass","display","tabSize","outline","border","boxShadow"],"mappings":"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"}