diff --git a/packages/editable-html-tip-tap/src/components/MenuBar.jsx b/packages/editable-html-tip-tap/src/components/MenuBar.jsx index 75831a6f5..43312032c 100644 --- a/packages/editable-html-tip-tap/src/components/MenuBar.jsx +++ b/packages/editable-html-tip-tap/src/components/MenuBar.jsx @@ -18,6 +18,7 @@ import Undo from '@mui/icons-material/Undo'; import TheatersIcon from '@mui/icons-material/Theaters'; import VolumeUpIcon from '@mui/icons-material/VolumeUp'; import BorderAll from '@mui/icons-material/BorderAll'; +import Delete from '@mui/icons-material/Delete'; import { useEditorState } from '@tiptap/react'; @@ -83,7 +84,8 @@ function MenuBar({ editor, classes, activePlugins, toolbarOpts: toolOpts, respon const hideDefaultToolbar = ctx.editor?.isActive('math') || ctx.editor?.isActive('explicit_constructed_response') || - ctx.editor?.isActive('imageUploadNode'); + ctx.editor?.isActive('imageUploadNode') || + ctx.editor?.isActive('drag_in_the_blank'); return { currentNode, @@ -320,8 +322,29 @@ function MenuBar({ editor, classes, activePlugins, toolbarOpts: toolOpts, respon [activePlugins, editor], ); + const isDragInTheBlankSelected = + editorState.hideDefaultToolbar && editorState.currentNode?.type?.name === 'drag_in_the_blank'; + return (
+ {isDragInTheBlankSelected && ( +
+
+ +
+
+ )} {!editorState.hideDefaultToolbar && (
diff --git a/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx b/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx index 4e2ef9d35..1b373335b 100644 --- a/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +++ b/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx @@ -33,7 +33,11 @@ const DragDrop = (props) => { // console.log({nodeProps.children}) return ( - + { pos={pos} value={attributes} duplicates={options.duplicates} + selected={selected} onChange={(choice) => onValueChange(editor, node, pos, choice)} removeResponse={(choice) => onRemoveResponse(editor, node, choice)} > diff --git a/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/choice.jsx b/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/choice.jsx index 5fc57b589..1a16307e3 100644 --- a/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/choice.jsx +++ b/packages/editable-html-tip-tap/src/components/respArea/DragInTheBlank/choice.jsx @@ -15,7 +15,7 @@ const StyledContent = styled('span')(({ theme }) => ({ }, })); -export function BlankContent({ n, children, isDragging, isOver, dragItem, value }) { +export function BlankContent({ n, children, isDragging, isOver, dragItem, value, selected }) { const [hoveredElementSize, setHoveredElementSize] = useState(null); const elementRef = useRef(null); @@ -56,15 +56,22 @@ export function BlankContent({ n, children, isDragging, isOver, dragItem, value const hasGrip = finalLabel !== '\u00A0'; const isPreview = dragItem && isOver; + const borderStyle = selected + ? `2px solid ${color.primaryDark()}` + : isPreview + ? `1px solid ${color.defaults.BORDER_DARK}` + : `1px solid ${color.defaults.BORDER_LIGHT}`; + return (
+ {children} ); @@ -223,6 +249,7 @@ DragDropChoice.propTypes = { onChange: PropTypes.func.isRequired, removeResponse: PropTypes.func.isRequired, duplicates: PropTypes.bool, + selected: PropTypes.bool, }; export default DragDropChoice; diff --git a/packages/editable-html-tip-tap/src/extensions/responseArea.js b/packages/editable-html-tip-tap/src/extensions/responseArea.js index b4e56b150..1690a90ff 100644 --- a/packages/editable-html-tip-tap/src/extensions/responseArea.js +++ b/packages/editable-html-tip-tap/src/extensions/responseArea.js @@ -187,14 +187,9 @@ export const ResponseAreaExtension = Extension.create({ // tr.setSelection(NodeSelection.create(tr.doc, usedPos)) // --- Cursor move behavior for certain types (Slate: moveFocusTo next text) --- - if ( - ['math_templated', 'inline_dropdown', 'drag_in_the_blank', 'explicit_constructed_response'].includes( - typeName, - ) - ) { + if (['math_templated', 'inline_dropdown', 'explicit_constructed_response'].includes(typeName)) { tr.setSelection(NodeSelection.create(tr.doc, usedPos)); } else { - // Default: put cursor after inserted node const after = usedPos + newInline.nodeSize; tr.setSelection(selectionAfterPos(tr.doc, after)); }