diff --git a/app/editor/components/FloatingToolbar.tsx b/app/editor/components/FloatingToolbar.tsx index 7f55010c3..f54fdac99 100644 --- a/app/editor/components/FloatingToolbar.tsx +++ b/app/editor/components/FloatingToolbar.tsx @@ -223,6 +223,7 @@ const FloatingToolbar = React.forwardRef(function FloatingToolbar_( return ( (null); - const isActive = useIsActive(view.state); + const isMobile = useMobile(); + const isActive = useIsActive(view.state) || isMobile; const isDragging = useIsDragging(); const previousIsActive = usePrevious(isActive); - const isMobile = useMobile(); React.useEffect(() => { // Trigger callbacks when the toolbar is opened or closed diff --git a/app/editor/components/ToolbarMenu.tsx b/app/editor/components/ToolbarMenu.tsx index 6e8cf190d..bead7a7f5 100644 --- a/app/editor/components/ToolbarMenu.tsx +++ b/app/editor/components/ToolbarMenu.tsx @@ -2,6 +2,7 @@ import * as React from "react"; import { useMenuState } from "reakit"; import { MenuButton } from "reakit/Menu"; import styled from "styled-components"; +import breakpoint from "styled-components-breakpoint"; import { MenuItem } from "@shared/editor/types"; import { s } from "@shared/styles"; import ContextMenu from "~/components/ContextMenu"; @@ -123,6 +124,11 @@ const FlexibleWrapper = styled.div` overflow: hidden; display: flex; gap: 6px; + + ${breakpoint("mobile", "tablet")` + justify-content: space-evenly; + align-items: baseline; + `} `; const Label = styled.span` diff --git a/app/editor/menus/formatting.tsx b/app/editor/menus/formatting.tsx index 39a138732..85dd31502 100644 --- a/app/editor/menus/formatting.tsx +++ b/app/editor/menus/formatting.tsx @@ -37,6 +37,7 @@ export default function formattingMenuItems( const isList = isInList(state); const isCode = isInCode(state); const isCodeBlock = isInCode(state, { onlyBlock: true }); + const isEmpty = state.selection.empty; return [ { @@ -44,50 +45,50 @@ export default function formattingMenuItems( tooltip: dictionary.placeholder, icon: , active: isMarkActive(schema.marks.placeholder), - visible: isTemplate, + visible: isTemplate && (!isMobile || !isEmpty), }, { name: "separator", - visible: isTemplate, + visible: isTemplate && (!isMobile || !isEmpty), }, { name: "strong", tooltip: dictionary.strong, icon: , active: isMarkActive(schema.marks.strong), - visible: !isCode, + visible: !isCode && (!isMobile || !isEmpty), }, { name: "em", tooltip: dictionary.em, icon: , active: isMarkActive(schema.marks.em), - visible: !isCode, + visible: !isCode && (!isMobile || !isEmpty), }, { name: "strikethrough", tooltip: dictionary.strikethrough, icon: , active: isMarkActive(schema.marks.strikethrough), - visible: !isCode, + visible: !isCode && (!isMobile || !isEmpty), }, { name: "highlight", tooltip: dictionary.mark, icon: , active: isMarkActive(schema.marks.highlight), - visible: !isTemplate && !isCode, + visible: !isCode && (!isMobile || !isEmpty), }, { name: "code_inline", tooltip: dictionary.codeInline, icon: , active: isMarkActive(schema.marks.code_inline), - visible: !isCodeBlock, + visible: !isCodeBlock && (!isMobile || !isEmpty), }, { name: "separator", - visible: !isCode, + visible: !isCodeBlock, }, { name: "heading", @@ -95,7 +96,7 @@ export default function formattingMenuItems( icon: , active: isNodeActive(schema.nodes.heading, { level: 1 }), attrs: { level: 1 }, - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "heading", @@ -103,7 +104,7 @@ export default function formattingMenuItems( icon: , active: isNodeActive(schema.nodes.heading, { level: 2 }), attrs: { level: 2 }, - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "heading", @@ -111,7 +112,7 @@ export default function formattingMenuItems( icon: , active: isNodeActive(schema.nodes.heading, { level: 3 }), attrs: { level: 3 }, - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "blockquote", @@ -119,11 +120,11 @@ export default function formattingMenuItems( icon: , active: isNodeActive(schema.nodes.blockquote), attrs: { level: 2 }, - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "separator", - visible: !isCode, + visible: !isCodeBlock, }, { name: "checkbox_list", @@ -131,21 +132,21 @@ export default function formattingMenuItems( icon: , keywords: "checklist checkbox task", active: isNodeActive(schema.nodes.checkbox_list), - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "bullet_list", tooltip: dictionary.bulletList, icon: , active: isNodeActive(schema.nodes.bullet_list), - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "ordered_list", tooltip: dictionary.orderedList, icon: , active: isNodeActive(schema.nodes.ordered_list), - visible: !isCode, + visible: !isCodeBlock && (!isMobile || isEmpty), }, { name: "outdentList", @@ -161,7 +162,7 @@ export default function formattingMenuItems( }, { name: "separator", - visible: !isCode, + visible: !isCodeBlock, }, { name: "link", @@ -169,7 +170,7 @@ export default function formattingMenuItems( icon: , active: isMarkActive(schema.marks.link), attrs: { href: "" }, - visible: !isCode, + visible: !isCodeBlock && (!isMobile || !isEmpty), }, { name: "comment", @@ -177,16 +178,17 @@ export default function formattingMenuItems( icon: , label: isCodeBlock ? dictionary.comment : undefined, active: isMarkActive(schema.marks.comment), + visible: !isMobile || !isEmpty, }, { name: "separator", - visible: isCode && !isCodeBlock, + visible: isCode && !isCodeBlock && (!isMobile || !isEmpty), }, { name: "copyToClipboard", icon: , tooltip: dictionary.copy, - visible: isCode && !isCodeBlock, + visible: isCode && !isCodeBlock && (!isMobile || !isEmpty), }, ]; }