diff --git a/public/icons/editor-horizontal-rule.svg b/public/icons/editor-horizontal-rule.svg
new file mode 100644
index 00000000..3349d421
--- /dev/null
+++ b/public/icons/editor-horizontal-rule.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/components/Editor/Editor.tsx b/src/components/Editor/Editor.tsx
index 23e012ae..6c05cf40 100644
--- a/src/components/Editor/Editor.tsx
+++ b/src/components/Editor/Editor.tsx
@@ -39,7 +39,6 @@ import { TextBubbleMenu } from './TextBubbleMenu'
import { ImageBubbleMenu } from './ImageBubbleMenu'
import { EditorFloatingMenu } from './EditorFloatingMenu'
import { useEditorContext } from '../../context/editor'
-import { isTextSelection } from '@tiptap/core'
type EditorProps = {
shoutId: number
@@ -105,7 +104,11 @@ export const Editor = (props: EditorProps) => {
Bold,
Italic,
Strike,
- HorizontalRule,
+ HorizontalRule.configure({
+ HTMLAttributes: {
+ class: 'horizontalRule'
+ }
+ }),
Underline,
Link.configure({
openOnClick: false
@@ -144,25 +147,17 @@ export const Editor = (props: EditorProps) => {
CharacterCount,
BubbleMenu.configure({
pluginKey: 'textBubbleMenu',
- element: textBubbleMenuRef.current,
- shouldShow: ({ editor: e, view, state, oldState, from, to }) => {
- const { doc, selection } = state
- const { empty } = selection
-
- const isEmptyTextBlock = doc.textBetween(from, to).length === 0 && isTextSelection(selection)
-
- if (!view.hasFocus() || empty || isEmptyTextBlock || e.isActive('image')) {
- return false
- }
-
- return true
- }
+ element: textBubbleMenuRef.current
+ // shouldShow: ({ editor: e, view, state, oldState, from, to }) => {
+ // console.log('!!! e:', view)
+ // return !e.isActive('image')
+ // }
}),
BubbleMenu.configure({
pluginKey: 'imageBubbleMenu',
element: imageBubbleMenuRef.current,
shouldShow: ({ editor: e, view, state, oldState, from, to }) => {
- return view.hasFocus() && e.isActive('image')
+ return e.isFocused && e.isActive('image')
}
}),
FloatingMenu.configure({
diff --git a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
index e6078156..83d6bdbd 100644
--- a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
+++ b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.module.scss
@@ -12,10 +12,10 @@
opacity: 1;
}
}
+
.menuHolder {
background: #fff;
left: calc(100% + 1rem);
- box-shadow: 0 4px 10px rgba(#000, 0.25);
position: absolute;
top: -0.8rem;
min-width: 64vw;
diff --git a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
index 23f916b9..30d91a07 100644
--- a/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
+++ b/src/components/Editor/EditorFloatingMenu/EditorFloatingMenu.tsx
@@ -7,6 +7,7 @@ import HTMLParser from 'html-to-json-parser'
import { useLocalize } from '../../../context/localize'
import { Modal } from '../../Nav/Modal'
import { Menu } from './Menu'
+import type { MenuItem } from './Menu/Menu'
import { showModal } from '../../../stores/ui'
import { UploadModalContent } from '../UploadModal'
@@ -31,7 +32,7 @@ const validateEmbed = async (value) => {
export const EditorFloatingMenu = (props: FloatingMenuProps) => {
const { t } = useLocalize()
- const [selectedMenuItem, setSelectedMenuItem] = createSignal(null)
+ const [selectedMenuItem, setSelectedMenuItem] = createSignal