@pie-lib/editable-html-tip-tap 2.1.9 → 2.1.10

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [2.1.10](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@2.1.9...@pie-lib/editable-html-tip-tap@2.1.10) (2026-07-08)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **editable-html-tip-tap:** handle cursor position based on node instead of the stale editor position PIE-698 ([fd562cc](https://github.com/pie-framework/pie-lib/commit/fd562cc0c211c204eba579d5cfd957efa2edf346))
11
+ - made sure math is rendered on response render [PIE-706] ([1cb50ba](https://github.com/pie-framework/pie-lib/commit/1cb50ba6908db9599f177a88aa012b75637ac23e))
12
+ - made sure the inline dropdown toolbar closed triggers an onDone [PIE-702] ([c77afed](https://github.com/pie-framework/pie-lib/commit/c77afed2d64126990af95522c9467fb600358832))
13
+
6
14
  ## [2.1.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html-tip-tap@2.1.8...@pie-lib/editable-html-tip-tap@2.1.9) (2026-07-01)
7
15
 
8
16
  ### Bug Fixes
@@ -103,8 +103,24 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
103
103
  });
104
104
  }, [setPendingImages]);
105
105
  var toolbarOptsToUse = _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
106
+ var commitEditorContent = (0, _react.useCallback)(function (editor) {
107
+ var html = editor.getHTML();
108
+ if (props.markup !== html) {
109
+ var _props$onChange;
110
+ (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, html);
111
+ }
112
+ if (toolbarOptsToUse.doneOn === 'blur') {
113
+ var _props$onDone;
114
+ (_props$onDone = props.onDone) === null || _props$onDone === void 0 || _props$onDone.call(props, html);
115
+ }
116
+ }, [props.markup, props.onChange, props.onDone, toolbarOptsToUse.doneOn]);
117
+ var responseAreaPropsToUse = (0, _react.useMemo)(function () {
118
+ return _objectSpread(_objectSpread(_objectSpread({}, defaultResponseAreaProps), props.responseAreaProps), {}, {
119
+ onInlineDropdownToolbarClose: commitEditorContent
120
+ });
121
+ }, [props.responseAreaProps, commitEditorContent]);
106
122
  var activePluginsToUse = (0, _react.useMemo)(function () {
107
- var _ref3, _props$responseAreaPr;
123
+ var _ref3;
108
124
  var _ref2 = props.pluginProps || {},
109
125
  customPlugins = _ref2.customPlugins,
110
126
  otherPluginProps = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
@@ -123,14 +139,14 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
123
139
  toolbar: {},
124
140
  table: {},
125
141
  responseArea: {
126
- type: (_props$responseAreaPr = props.responseAreaProps) === null || _props$responseAreaPr === void 0 ? void 0 : _props$responseAreaPr.type
142
+ type: responseAreaPropsToUse.type
127
143
  },
128
144
  languageCharacters: props.languageCharactersProps,
129
145
  keyPadCharacterRef: {},
130
146
  setKeypadInteraction: {},
131
147
  media: {}
132
148
  });
133
- }, [props]);
149
+ }, [props, responseAreaPropsToUse.type]);
134
150
  var extensions = [_extensionTextAlign["default"].configure({
135
151
  types: ['heading', 'paragraph', 'div', 'headingParagraph', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'th'],
136
152
  alignments: ['left', 'right', 'center', 'justify']
@@ -148,7 +164,7 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
148
164
  showOnlyCurrent: false,
149
165
  // show on all empty nodes, not only the current one
150
166
  includeChildren: true
151
- }), _extendedTable["default"], _extensionTableRow.TableRow, _extendedTableCell.ExtendedTableHeader, _extendedTableCell.ExtendedTableCell, _responseArea.ResponseAreaExtension.configure(props.responseAreaProps), _responseArea.ExplicitConstructedResponseNode.configure(props.responseAreaProps), _responseArea.DragInTheBlankNode.configure(props.responseAreaProps), _responseArea.InlineDropdownNode.configure(props.responseAreaProps), _responseArea.MathTemplatedNode.configure(props.responseAreaProps), _math.MathNode.configure({
167
+ }), _extendedTable["default"], _extensionTableRow.TableRow, _extendedTableCell.ExtendedTableHeader, _extendedTableCell.ExtendedTableCell, _responseArea.ResponseAreaExtension.configure(responseAreaPropsToUse), _responseArea.ExplicitConstructedResponseNode.configure(responseAreaPropsToUse), _responseArea.DragInTheBlankNode.configure(responseAreaPropsToUse), _responseArea.InlineDropdownNode.configure(responseAreaPropsToUse), _responseArea.MathTemplatedNode.configure(responseAreaPropsToUse), _math.MathNode.configure({
152
168
  toolbarOpts: toolbarOptsToUse,
153
169
  math: ((_props$pluginProps = props.pluginProps) === null || _props$pluginProps === void 0 ? void 0 : _props$pluginProps.math) || {}
154
170
  }), _extensionSubscript["default"], _extensionSuperscript["default"], _extensionImage["default"], _image.ImageUploadNode.configure({
@@ -156,8 +172,8 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
156
172
  imageHandling: {
157
173
  disableImageAlignmentButtons: props.disableImageAlignmentButtons,
158
174
  onDone: function onDone(editor) {
159
- var _props$onDone;
160
- return (_props$onDone = props.onDone) === null || _props$onDone === void 0 ? void 0 : _props$onDone.call(props, editor.getHTML());
175
+ var _props$onDone2;
176
+ return (_props$onDone2 = props.onDone) === null || _props$onDone2 === void 0 ? void 0 : _props$onDone2.call(props, editor.getHTML());
161
177
  },
162
178
  onDelete: props.imageSupport && props.imageSupport["delete"] && function (node) {
163
179
  var src = node.attrs.src;
@@ -237,8 +253,8 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
237
253
  var editor = _ref4.editor,
238
254
  transaction = _ref4.transaction;
239
255
  if (transaction.isDone) {
240
- var _props$onChange;
241
- (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, editor.getHTML());
256
+ var _props$onChange2;
257
+ (_props$onChange2 = props.onChange) === null || _props$onChange2 === void 0 || _props$onChange2.call(props, editor.getHTML());
242
258
  }
243
259
  },
244
260
  onBlur: function onBlur(_ref5) {
@@ -247,15 +263,7 @@ var EditableHtml = exports.EditableHtml = function EditableHtml(props) {
247
263
  if (otherToolbarOpened || !editor.schema) {
248
264
  return;
249
265
  }
250
- var html = editor.getHTML();
251
- if (props.markup !== html) {
252
- var _props$onChange2;
253
- (_props$onChange2 = props.onChange) === null || _props$onChange2 === void 0 || _props$onChange2.call(props, html);
254
- }
255
- if (toolbarOptsToUse.doneOn === 'blur') {
256
- var _props$onDone2;
257
- (_props$onDone2 = props.onDone) === null || _props$onDone2 === void 0 || _props$onDone2.call(props, html);
258
- }
266
+ commitEditorContent(editor);
259
267
  }
260
268
  }, [props.charactersLimit]);
261
269
  (0, _react.useEffect)(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"EditableHtml.js","names":["_react","_interopRequireWildcard","require","_debounce","_interopRequireDefault","_react2","_styles","_starterKit","_extensionTextStyle","_extensionCharacterCount","_extensionSuperscript","_extensionSubscript","_extensionTextAlign","_extensionImage","_extensionPlaceholder","_helper","_extendedTable","_extendedTableCell","_divNode","_ensureEmptyRootDiv","_ensureListItemContentIsDiv","_extensionTableRow","_responseArea","_math","_image","_media","_css","_extendedListItem","_headingParagraph","_TiptapContainer","_size","_extensions","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","DEFAULT_ACTIVE_PLUGINS","cssVariables","EditableHtml","exports","props","_props$pluginProps","_ref","pluginProps","showParagraphs","separateParagraphs","_useState","useState","_useState2","_slicedToArray2","pendingImages","setPendingImages","_useState3","_useState4","scheduled","setScheduled","toolbarOpts","removePendingImage","useCallback","imagePos","prev","next","img","pos","toolbarOptsToUse","activePluginsToUse","useMemo","_ref3","_props$responseAreaPr","_ref2","customPlugins","otherPluginProps","_objectWithoutProperties2","filteredActivePlugins","activePlugins","pluginName","nameToUse","PLUGINS_MAP","pluginInfo","disabled","buildExtensions","math","textAlign","html","extraCSSRules","image","imageSupport","toolbar","table","responseArea","type","responseAreaProps","languageCharacters","languageCharactersProps","keyPadCharacterRef","setKeypadInteraction","media","extensions","TextAlign","configure","types","alignments","TextStyleKit","CharacterCount","limit","charactersLimit","StarterKit","trailingNode","node","notAfter","ExtendedListItem","DivNode","HeadingParagraph","EnsureEmptyRootIsDiv","EnsureListItemContentIsDiv","Placeholder","placeholder","showOnlyWhenEditable","showOnlyCurrent","includeChildren","ExtendedTable","TableRow","ExtendedTableHeader","ExtendedTableCell","ResponseAreaExtension","ExplicitConstructedResponseNode","DragInTheBlankNode","InlineDropdownNode","MathTemplatedNode","MathNode","SubScript","SuperScript","Image","ImageUploadNode","imageHandling","disableImageAlignmentButtons","onDone","editor","_props$onDone","getHTML","onDelete","src","attrs","insertImageRequested","imageInfo","getHandler","_imageInfo","addedImage","onFinish","result","_cb","cb","onChange","callback","handler","focusHandler","debounce","detach","window","removeEventListener","_insertingImage","addEventListener","add","concat","_toConsumableArray2","maxImageWidth","maxImageHeight","Media","uploadSoundSupport","CSSMark","useEditor","immediatelyRender","editorProps","handleKeyDown","view","event","onKeyDown","editable","content","normalizeInitialMarkup","markup","onUpdate","_ref4","transaction","isDone","_props$onChange","onBlur","_ref5","otherToolbarOpened","_toolbarOpened","isActive","schema","_props$onChange2","_props$onDone2","useEffect","editorRef","setEditable","nextMarkup","commands","setContent","emitUpdate","entries","_ref6","_ref7","key","value","document","documentElement","style","setProperty","editorState","useEditorState","selector","ctx","_ctx$editor","isFocused","sizeStyle","minWidth","width","maxWidth","minHeight","height","maxHeight","valueToSize","createElement","_extends2","StyledEditorContent","showParagraph","separateParagraph","styled","EditorContent","shouldForwardProp","prop","includes","_ref8","display","outline","flex","padding","margin","left","top","color","pointerEvents","whiteSpace","fontSize","marginBottom","_default"],"sources":["../../src/components/EditableHtml.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport debounce from 'lodash-es/debounce';\nimport { EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { styled } from '@mui/material/styles';\nimport StarterKit from '@tiptap/starter-kit';\nimport { TextStyleKit } from '@tiptap/extension-text-style';\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport SuperScript from '@tiptap/extension-superscript';\nimport SubScript from '@tiptap/extension-subscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { normalizeInitialMarkup } from '../utils/helper';\n\nimport ExtendedTable from '../extensions/extended-table';\nimport { ExtendedTableCell, ExtendedTableHeader } from '../extensions/extended-table-cell';\nimport { DivNode } from '../extensions/div-node';\nimport { EnsureEmptyRootIsDiv } from '../extensions/ensure-empty-root-div';\nimport { EnsureListItemContentIsDiv } from '../extensions/ensure-list-item-content-is-div';\nimport { TableRow } from '@tiptap/extension-table-row';\nimport {\n DragInTheBlankNode,\n ExplicitConstructedResponseNode,\n InlineDropdownNode,\n MathTemplatedNode,\n ResponseAreaExtension,\n} from '../extensions/responseArea';\nimport { MathNode } from '../extensions/math';\nimport { ImageUploadNode } from '../extensions/image';\nimport { Media } from '../extensions/media';\nimport { CSSMark } from '../extensions/css';\nimport { ExtendedListItem } from '../extensions/extended-list-item';\nimport { HeadingParagraph } from '../extensions/heading-paragraph';\n\nimport EditorContainer from './TiptapContainer';\nimport { valueToSize } from '../utils/size';\nimport { buildExtensions, PLUGINS_MAP } from '../extensions';\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur',\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {},\n};\n\nconst DEFAULT_ACTIVE_PLUGINS = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'code',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'superscript',\n 'subscript',\n 'css',\n 'h3',\n 'undo',\n 'redo',\n];\n\nconst cssVariables = {\n '--white': '#fff',\n '--black': '#2e2b29',\n '--black-contrast': '#110f0e',\n '--gray-1': 'rgba(61, 37, 20, .05)',\n '--gray-2': 'rgba(61, 37, 20, .08)',\n '--gray-3': 'rgba(61, 37, 20, .12)',\n '--gray-4': 'rgba(53, 38, 28, .3)',\n '--gray-5': 'rgba(28, 25, 23, .6)',\n '--green': '#22c55e',\n '--purple': '#6a00f5',\n '--purple-contrast': '#5800cc',\n '--purple-light': 'rgba(88, 5, 255, .05)',\n '--yellow-contrast': '#facc15',\n '--yellow': 'rgba(250, 204, 21, .4)',\n '--yellow-light': '#fffae5',\n '--red': '#ff5c33',\n '--red-light': '#ffebe5',\n '--shadow': `0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)`,\n};\n\nexport const EditableHtml = (props) => {\n const { showParagraphs, separateParagraphs } = props.pluginProps || {};\n const [pendingImages, setPendingImages] = useState([]);\n const [scheduled, setScheduled] = useState(false);\n const { toolbarOpts } = props;\n\n const removePendingImage = useCallback(\n (imagePos) => {\n setPendingImages((prev) => {\n const next = prev.filter((img) => img.pos !== imagePos);\n if (next.length === 0) {\n setScheduled(false);\n }\n return next;\n });\n },\n [setPendingImages],\n );\n\n const toolbarOptsToUse = {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n };\n\n const activePluginsToUse = useMemo(() => {\n let { customPlugins, ...otherPluginProps } = props.pluginProps || {};\n\n customPlugins = customPlugins || [];\n\n const filteredActivePlugins = (props.activePlugins || DEFAULT_ACTIVE_PLUGINS)?.filter((pluginName) => {\n const nameToUse = PLUGINS_MAP[pluginName] || pluginName;\n const pluginInfo = otherPluginProps[nameToUse] || {};\n\n return !pluginInfo || !pluginInfo.disabled;\n });\n\n return buildExtensions(filteredActivePlugins, customPlugins, {\n math: {},\n textAlign: props.textAlign,\n html: {},\n extraCSSRules: props.extraCSSRules || {},\n image: {\n ...props.imageSupport,\n },\n toolbar: {},\n table: {},\n responseArea: {\n type: props.responseAreaProps?.type,\n },\n languageCharacters: props.languageCharactersProps,\n keyPadCharacterRef: {},\n setKeypadInteraction: {},\n media: {},\n });\n }, [props]);\n\n const extensions = [\n TextAlign.configure({\n types: ['heading', 'paragraph', 'div', 'headingParagraph', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'th'],\n alignments: ['left', 'right', 'center', 'justify'],\n }),\n TextStyleKit,\n CharacterCount.configure({\n limit: props.charactersLimit || 1000000,\n }),\n StarterKit.configure({\n trailingNode: {\n node: 'paragraph',\n notAfter: ['paragraph', 'div'],\n },\n }),\n ExtendedListItem,\n DivNode,\n HeadingParagraph,\n EnsureEmptyRootIsDiv,\n EnsureListItemContentIsDiv,\n Placeholder.configure({\n placeholder: props.placeholder,\n // show placeholder even when editor is focused\n showOnlyWhenEditable: true,\n showOnlyCurrent: false, // show on all empty nodes, not only the current one\n includeChildren: true,\n }),\n ExtendedTable,\n TableRow,\n ExtendedTableHeader,\n ExtendedTableCell,\n ResponseAreaExtension.configure(props.responseAreaProps),\n ExplicitConstructedResponseNode.configure(props.responseAreaProps),\n DragInTheBlankNode.configure(props.responseAreaProps),\n InlineDropdownNode.configure(props.responseAreaProps),\n MathTemplatedNode.configure(props.responseAreaProps),\n MathNode.configure({\n toolbarOpts: toolbarOptsToUse,\n math: props.pluginProps?.math || {},\n }),\n SubScript,\n SuperScript,\n Image,\n ImageUploadNode.configure({\n toolbarOpts: toolbarOptsToUse,\n imageHandling: {\n disableImageAlignmentButtons: props.disableImageAlignmentButtons,\n onDone: (editor) => props.onDone?.(editor.getHTML()),\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((node) => {\n const { src } = node.attrs;\n\n props.imageSupport.delete(src, (e) => {\n removePendingImage(node.pos);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n ((editor, imageInfo, getHandler) => {\n const [addedImage, pos] = imageInfo;\n\n const onFinish = (result) => {\n let cb;\n\n if (scheduled && result) {\n // finish editing only on success\n cb = props.onChange;\n }\n\n removePendingImage(pos);\n cb?.(editor.getHTML());\n };\n\n const callback = () => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(onFinish);\n\n // If the user closes the file picker without choosing a file, the window regains\n // focus while _insertingImage is still true — drop the stale pending entry.\n const focusHandler = debounce(() => {\n const detach = () => window.removeEventListener('focus', focusHandler);\n\n if (!editor._insertingImage) {\n detach();\n return;\n }\n\n removePendingImage(pos);\n editor._insertingImage = false;\n detach();\n }, 500);\n\n window.addEventListener('focus', focusHandler);\n\n props.imageSupport.add(handler);\n };\n\n editor._insertingImage = true;\n setPendingImages((prev) => [...prev, addedImage]);\n callback();\n }),\n maxImageWidth: props.maxImageWidth,\n maxImageHeight: props.maxImageHeight,\n },\n limit: 3,\n }),\n Media.configure({\n uploadSoundSupport: props.uploadSoundSupport,\n }),\n CSSMark.configure({\n extraCSSRules: props.extraCSSRules,\n }),\n ];\n\n const editor = useEditor(\n {\n extensions,\n immediatelyRender: false,\n editorProps: {\n handleKeyDown(view, event) {\n if (props.onKeyDown) {\n return props.onKeyDown(event);\n }\n\n // Return false to let default behavior continue\n return false;\n },\n },\n editable: !props.disabled,\n content: normalizeInitialMarkup(props.markup),\n onUpdate: ({ editor, transaction }) => {\n if (transaction.isDone) {\n props.onChange?.(editor.getHTML());\n }\n },\n onBlur: ({ editor }) => {\n const otherToolbarOpened =\n editor._insertingImage ||\n editor._toolbarOpened ||\n editor.isActive('inline_dropdown') ||\n editor.isActive('explicit_constructed_response');\n\n if (otherToolbarOpened || !editor.schema) {\n return;\n }\n\n const html = editor.getHTML();\n\n if (props.markup !== html) {\n props.onChange?.(html);\n }\n\n if (toolbarOptsToUse.doneOn === 'blur') {\n props.onDone?.(html);\n }\n },\n },\n [props.charactersLimit],\n );\n\n useEffect(() => {\n if (props.editorRef) {\n props.editorRef(editor);\n }\n }, [props.editorRef, editor]);\n\n useEffect(() => {\n editor?.setEditable(!props.disabled);\n }, [props.disabled, editor]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n const nextMarkup = normalizeInitialMarkup(props.markup);\n\n if (nextMarkup !== editor.getHTML()) {\n editor.commands.setContent(nextMarkup, { emitUpdate: false });\n }\n }, [props.markup, editor]);\n\n useEffect(() => {\n Object.entries(cssVariables).forEach(([key, value]) => {\n document.documentElement.style.setProperty(key, value);\n });\n }, []);\n\n const editorState = useEditorState({\n editor,\n selector: (ctx) => ({\n isFocused: ctx.editor?.isFocused,\n }),\n });\n\n const sizeStyle = useMemo(() => {\n const { minWidth, width, maxWidth, minHeight, height, maxHeight } = props;\n\n return {\n width: valueToSize(width),\n minWidth: valueToSize(minWidth),\n maxWidth: valueToSize(maxWidth),\n height: valueToSize(height),\n minHeight: valueToSize(minHeight),\n maxHeight: valueToSize(maxHeight),\n };\n }, [props]);\n\n return (\n <EditorContainer\n {...{\n ...props,\n activePlugins: activePluginsToUse,\n toolbarOpts: toolbarOptsToUse,\n }}\n editorState={editorState}\n editor={editor}\n >\n {editor && (\n <StyledEditorContent\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight,\n }}\n showParagraph={showParagraphs && !showParagraphs.disabled}\n separateParagraph={separateParagraphs && !separateParagraphs.disabled}\n editor={editor}\n />\n )}\n </EditorContainer>\n );\n};\n\nconst StyledEditorContent = styled(EditorContent, {\n shouldForwardProp: (prop) => !['showParagraph', 'separateParagraph'].includes(prop),\n})(({ showParagraph, separateParagraph }) => ({\n display: 'flex',\n outline: 'none !important',\n '& .ProseMirror': {\n flex: 1,\n padding: '5px',\n maxHeight: '500px',\n outline: 'none !important',\n position: 'initial',\n\n // reset default margins for all block paragraphs/divs in the editor\n '& > p, & > div': {\n margin: '0',\n },\n\n // Out of flow so the caret stays at the start of the block; in-flow ::before pushes the caret after the hint text.\n '& p.is-editor-empty, & div.is-editor-empty': {\n position: 'relative',\n },\n '& p.is-editor-empty::before, & div.is-editor-empty::before': {\n content: 'attr(data-placeholder)',\n position: 'absolute',\n left: 0,\n top: 0,\n color: '#9CA3AF',\n pointerEvents: 'none',\n whiteSpace: 'pre-wrap',\n },\n\n ...(showParagraph && {\n '& > p:has(+ p)::after, & > div:has(+ div)::after': {\n display: 'block',\n content: '\"¶\"',\n fontSize: '1em',\n color: '#146EB3',\n },\n }),\n ...(separateParagraph && {\n '& > p:has(+ p)': {\n marginBottom: '1em',\n },\n }),\n },\n}));\n\nexport default EditableHtml;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"EditableHtml.js","names":["_react","_interopRequireWildcard","require","_debounce","_interopRequireDefault","_react2","_styles","_starterKit","_extensionTextStyle","_extensionCharacterCount","_extensionSuperscript","_extensionSubscript","_extensionTextAlign","_extensionImage","_extensionPlaceholder","_helper","_extendedTable","_extendedTableCell","_divNode","_ensureEmptyRootDiv","_ensureListItemContentIsDiv","_extensionTableRow","_responseArea","_math","_image","_media","_css","_extendedListItem","_headingParagraph","_TiptapContainer","_size","_extensions","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","DEFAULT_ACTIVE_PLUGINS","cssVariables","EditableHtml","exports","props","_props$pluginProps","_ref","pluginProps","showParagraphs","separateParagraphs","_useState","useState","_useState2","_slicedToArray2","pendingImages","setPendingImages","_useState3","_useState4","scheduled","setScheduled","toolbarOpts","removePendingImage","useCallback","imagePos","prev","next","img","pos","toolbarOptsToUse","commitEditorContent","editor","html","getHTML","markup","_props$onChange","onChange","_props$onDone","onDone","responseAreaPropsToUse","useMemo","responseAreaProps","onInlineDropdownToolbarClose","activePluginsToUse","_ref3","_ref2","customPlugins","otherPluginProps","_objectWithoutProperties2","filteredActivePlugins","activePlugins","pluginName","nameToUse","PLUGINS_MAP","pluginInfo","disabled","buildExtensions","math","textAlign","extraCSSRules","image","imageSupport","toolbar","table","responseArea","type","languageCharacters","languageCharactersProps","keyPadCharacterRef","setKeypadInteraction","media","extensions","TextAlign","configure","types","alignments","TextStyleKit","CharacterCount","limit","charactersLimit","StarterKit","trailingNode","node","notAfter","ExtendedListItem","DivNode","HeadingParagraph","EnsureEmptyRootIsDiv","EnsureListItemContentIsDiv","Placeholder","placeholder","showOnlyWhenEditable","showOnlyCurrent","includeChildren","ExtendedTable","TableRow","ExtendedTableHeader","ExtendedTableCell","ResponseAreaExtension","ExplicitConstructedResponseNode","DragInTheBlankNode","InlineDropdownNode","MathTemplatedNode","MathNode","SubScript","SuperScript","Image","ImageUploadNode","imageHandling","disableImageAlignmentButtons","_props$onDone2","onDelete","src","attrs","insertImageRequested","imageInfo","getHandler","_imageInfo","addedImage","onFinish","result","_cb","cb","callback","handler","focusHandler","debounce","detach","window","removeEventListener","_insertingImage","addEventListener","add","concat","_toConsumableArray2","maxImageWidth","maxImageHeight","Media","uploadSoundSupport","CSSMark","useEditor","immediatelyRender","editorProps","handleKeyDown","view","event","onKeyDown","editable","content","normalizeInitialMarkup","onUpdate","_ref4","transaction","isDone","_props$onChange2","onBlur","_ref5","otherToolbarOpened","_toolbarOpened","isActive","schema","useEffect","editorRef","setEditable","nextMarkup","commands","setContent","emitUpdate","entries","_ref6","_ref7","key","value","document","documentElement","style","setProperty","editorState","useEditorState","selector","ctx","_ctx$editor","isFocused","sizeStyle","minWidth","width","maxWidth","minHeight","height","maxHeight","valueToSize","createElement","_extends2","StyledEditorContent","showParagraph","separateParagraph","styled","EditorContent","shouldForwardProp","prop","includes","_ref8","display","outline","flex","padding","margin","left","top","color","pointerEvents","whiteSpace","fontSize","marginBottom","_default"],"sources":["../../src/components/EditableHtml.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport debounce from 'lodash-es/debounce';\nimport { EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { styled } from '@mui/material/styles';\nimport StarterKit from '@tiptap/starter-kit';\nimport { TextStyleKit } from '@tiptap/extension-text-style';\nimport { CharacterCount } from '@tiptap/extension-character-count';\nimport SuperScript from '@tiptap/extension-superscript';\nimport SubScript from '@tiptap/extension-subscript';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Image from '@tiptap/extension-image';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport { normalizeInitialMarkup } from '../utils/helper';\n\nimport ExtendedTable from '../extensions/extended-table';\nimport { ExtendedTableCell, ExtendedTableHeader } from '../extensions/extended-table-cell';\nimport { DivNode } from '../extensions/div-node';\nimport { EnsureEmptyRootIsDiv } from '../extensions/ensure-empty-root-div';\nimport { EnsureListItemContentIsDiv } from '../extensions/ensure-list-item-content-is-div';\nimport { TableRow } from '@tiptap/extension-table-row';\nimport {\n DragInTheBlankNode,\n ExplicitConstructedResponseNode,\n InlineDropdownNode,\n MathTemplatedNode,\n ResponseAreaExtension,\n} from '../extensions/responseArea';\nimport { MathNode } from '../extensions/math';\nimport { ImageUploadNode } from '../extensions/image';\nimport { Media } from '../extensions/media';\nimport { CSSMark } from '../extensions/css';\nimport { ExtendedListItem } from '../extensions/extended-list-item';\nimport { HeadingParagraph } from '../extensions/heading-paragraph';\n\nimport EditorContainer from './TiptapContainer';\nimport { valueToSize } from '../utils/size';\nimport { buildExtensions, PLUGINS_MAP } from '../extensions';\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur',\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {},\n};\n\nconst DEFAULT_ACTIVE_PLUGINS = [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'code',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'languageCharacters',\n 'text-align',\n 'table',\n 'video',\n 'audio',\n 'responseArea',\n 'superscript',\n 'subscript',\n 'css',\n 'h3',\n 'undo',\n 'redo',\n];\n\nconst cssVariables = {\n '--white': '#fff',\n '--black': '#2e2b29',\n '--black-contrast': '#110f0e',\n '--gray-1': 'rgba(61, 37, 20, .05)',\n '--gray-2': 'rgba(61, 37, 20, .08)',\n '--gray-3': 'rgba(61, 37, 20, .12)',\n '--gray-4': 'rgba(53, 38, 28, .3)',\n '--gray-5': 'rgba(28, 25, 23, .6)',\n '--green': '#22c55e',\n '--purple': '#6a00f5',\n '--purple-contrast': '#5800cc',\n '--purple-light': 'rgba(88, 5, 255, .05)',\n '--yellow-contrast': '#facc15',\n '--yellow': 'rgba(250, 204, 21, .4)',\n '--yellow-light': '#fffae5',\n '--red': '#ff5c33',\n '--red-light': '#ffebe5',\n '--shadow': `0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)`,\n};\n\nexport const EditableHtml = (props) => {\n const { showParagraphs, separateParagraphs } = props.pluginProps || {};\n const [pendingImages, setPendingImages] = useState([]);\n const [scheduled, setScheduled] = useState(false);\n const { toolbarOpts } = props;\n\n const removePendingImage = useCallback(\n (imagePos) => {\n setPendingImages((prev) => {\n const next = prev.filter((img) => img.pos !== imagePos);\n if (next.length === 0) {\n setScheduled(false);\n }\n return next;\n });\n },\n [setPendingImages],\n );\n\n const toolbarOptsToUse = {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n };\n\n const commitEditorContent = useCallback(\n (editor) => {\n const html = editor.getHTML();\n\n if (props.markup !== html) {\n props.onChange?.(html);\n }\n\n if (toolbarOptsToUse.doneOn === 'blur') {\n props.onDone?.(html);\n }\n },\n [props.markup, props.onChange, props.onDone, toolbarOptsToUse.doneOn],\n );\n\n const responseAreaPropsToUse = useMemo(\n () => ({\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\n onInlineDropdownToolbarClose: commitEditorContent,\n }),\n [props.responseAreaProps, commitEditorContent],\n );\n\n const activePluginsToUse = useMemo(() => {\n let { customPlugins, ...otherPluginProps } = props.pluginProps || {};\n\n customPlugins = customPlugins || [];\n\n const filteredActivePlugins = (props.activePlugins || DEFAULT_ACTIVE_PLUGINS)?.filter((pluginName) => {\n const nameToUse = PLUGINS_MAP[pluginName] || pluginName;\n const pluginInfo = otherPluginProps[nameToUse] || {};\n\n return !pluginInfo || !pluginInfo.disabled;\n });\n\n return buildExtensions(filteredActivePlugins, customPlugins, {\n math: {},\n textAlign: props.textAlign,\n html: {},\n extraCSSRules: props.extraCSSRules || {},\n image: {\n ...props.imageSupport,\n },\n toolbar: {},\n table: {},\n responseArea: {\n type: responseAreaPropsToUse.type,\n },\n languageCharacters: props.languageCharactersProps,\n keyPadCharacterRef: {},\n setKeypadInteraction: {},\n media: {},\n });\n }, [props, responseAreaPropsToUse.type]);\n\n const extensions = [\n TextAlign.configure({\n types: ['heading', 'paragraph', 'div', 'headingParagraph', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'td', 'th'],\n alignments: ['left', 'right', 'center', 'justify'],\n }),\n TextStyleKit,\n CharacterCount.configure({\n limit: props.charactersLimit || 1000000,\n }),\n StarterKit.configure({\n trailingNode: {\n node: 'paragraph',\n notAfter: ['paragraph', 'div'],\n },\n }),\n ExtendedListItem,\n DivNode,\n HeadingParagraph,\n EnsureEmptyRootIsDiv,\n EnsureListItemContentIsDiv,\n Placeholder.configure({\n placeholder: props.placeholder,\n // show placeholder even when editor is focused\n showOnlyWhenEditable: true,\n showOnlyCurrent: false, // show on all empty nodes, not only the current one\n includeChildren: true,\n }),\n ExtendedTable,\n TableRow,\n ExtendedTableHeader,\n ExtendedTableCell,\n ResponseAreaExtension.configure(responseAreaPropsToUse),\n ExplicitConstructedResponseNode.configure(responseAreaPropsToUse),\n DragInTheBlankNode.configure(responseAreaPropsToUse),\n InlineDropdownNode.configure(responseAreaPropsToUse),\n MathTemplatedNode.configure(responseAreaPropsToUse),\n MathNode.configure({\n toolbarOpts: toolbarOptsToUse,\n math: props.pluginProps?.math || {},\n }),\n SubScript,\n SuperScript,\n Image,\n ImageUploadNode.configure({\n toolbarOpts: toolbarOptsToUse,\n imageHandling: {\n disableImageAlignmentButtons: props.disableImageAlignmentButtons,\n onDone: (editor) => props.onDone?.(editor.getHTML()),\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((node) => {\n const { src } = node.attrs;\n\n props.imageSupport.delete(src, (e) => {\n removePendingImage(node.pos);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n ((editor, imageInfo, getHandler) => {\n const [addedImage, pos] = imageInfo;\n\n const onFinish = (result) => {\n let cb;\n\n if (scheduled && result) {\n // finish editing only on success\n cb = props.onChange;\n }\n\n removePendingImage(pos);\n cb?.(editor.getHTML());\n };\n\n const callback = () => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(onFinish);\n\n // If the user closes the file picker without choosing a file, the window regains\n // focus while _insertingImage is still true — drop the stale pending entry.\n const focusHandler = debounce(() => {\n const detach = () => window.removeEventListener('focus', focusHandler);\n\n if (!editor._insertingImage) {\n detach();\n return;\n }\n\n removePendingImage(pos);\n editor._insertingImage = false;\n detach();\n }, 500);\n\n window.addEventListener('focus', focusHandler);\n\n props.imageSupport.add(handler);\n };\n\n editor._insertingImage = true;\n setPendingImages((prev) => [...prev, addedImage]);\n callback();\n }),\n maxImageWidth: props.maxImageWidth,\n maxImageHeight: props.maxImageHeight,\n },\n limit: 3,\n }),\n Media.configure({\n uploadSoundSupport: props.uploadSoundSupport,\n }),\n CSSMark.configure({\n extraCSSRules: props.extraCSSRules,\n }),\n ];\n\n const editor = useEditor(\n {\n extensions,\n immediatelyRender: false,\n editorProps: {\n handleKeyDown(view, event) {\n if (props.onKeyDown) {\n return props.onKeyDown(event);\n }\n\n // Return false to let default behavior continue\n return false;\n },\n },\n editable: !props.disabled,\n content: normalizeInitialMarkup(props.markup),\n onUpdate: ({ editor, transaction }) => {\n if (transaction.isDone) {\n props.onChange?.(editor.getHTML());\n }\n },\n onBlur: ({ editor }) => {\n const otherToolbarOpened =\n editor._insertingImage ||\n editor._toolbarOpened ||\n editor.isActive('inline_dropdown') ||\n editor.isActive('explicit_constructed_response');\n\n if (otherToolbarOpened || !editor.schema) {\n return;\n }\n\n commitEditorContent(editor);\n },\n },\n [props.charactersLimit],\n );\n\n useEffect(() => {\n if (props.editorRef) {\n props.editorRef(editor);\n }\n }, [props.editorRef, editor]);\n\n useEffect(() => {\n editor?.setEditable(!props.disabled);\n }, [props.disabled, editor]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n const nextMarkup = normalizeInitialMarkup(props.markup);\n\n if (nextMarkup !== editor.getHTML()) {\n editor.commands.setContent(nextMarkup, { emitUpdate: false });\n }\n }, [props.markup, editor]);\n\n useEffect(() => {\n Object.entries(cssVariables).forEach(([key, value]) => {\n document.documentElement.style.setProperty(key, value);\n });\n }, []);\n\n const editorState = useEditorState({\n editor,\n selector: (ctx) => ({\n isFocused: ctx.editor?.isFocused,\n }),\n });\n\n const sizeStyle = useMemo(() => {\n const { minWidth, width, maxWidth, minHeight, height, maxHeight } = props;\n\n return {\n width: valueToSize(width),\n minWidth: valueToSize(minWidth),\n maxWidth: valueToSize(maxWidth),\n height: valueToSize(height),\n minHeight: valueToSize(minHeight),\n maxHeight: valueToSize(maxHeight),\n };\n }, [props]);\n\n return (\n <EditorContainer\n {...{\n ...props,\n activePlugins: activePluginsToUse,\n toolbarOpts: toolbarOptsToUse,\n }}\n editorState={editorState}\n editor={editor}\n >\n {editor && (\n <StyledEditorContent\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight,\n }}\n showParagraph={showParagraphs && !showParagraphs.disabled}\n separateParagraph={separateParagraphs && !separateParagraphs.disabled}\n editor={editor}\n />\n )}\n </EditorContainer>\n );\n};\n\nconst StyledEditorContent = styled(EditorContent, {\n shouldForwardProp: (prop) => !['showParagraph', 'separateParagraph'].includes(prop),\n})(({ showParagraph, separateParagraph }) => ({\n display: 'flex',\n outline: 'none !important',\n '& .ProseMirror': {\n flex: 1,\n padding: '5px',\n maxHeight: '500px',\n outline: 'none !important',\n position: 'initial',\n\n // reset default margins for all block paragraphs/divs in the editor\n '& > p, & > div': {\n margin: '0',\n },\n\n // Out of flow so the caret stays at the start of the block; in-flow ::before pushes the caret after the hint text.\n '& p.is-editor-empty, & div.is-editor-empty': {\n position: 'relative',\n },\n '& p.is-editor-empty::before, & div.is-editor-empty::before': {\n content: 'attr(data-placeholder)',\n position: 'absolute',\n left: 0,\n top: 0,\n color: '#9CA3AF',\n pointerEvents: 'none',\n whiteSpace: 'pre-wrap',\n },\n\n ...(showParagraph && {\n '& > p:has(+ p)::after, & > div:has(+ div)::after': {\n display: 'block',\n content: '\"¶\"',\n fontSize: '1em',\n color: '#146EB3',\n },\n }),\n ...(separateParagraph && {\n '& > p:has(+ p)': {\n marginBottom: '1em',\n },\n }),\n },\n}));\n\nexport default EditableHtml;\n"],"mappings":"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","ignoreList":[]}
@@ -8,11 +8,12 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports["default"] = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
+ var _reactDom = _interopRequireDefault(require("react-dom"));
12
+ var _mathRendering = require("@pie-lib/math-rendering");
11
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
14
  var _react2 = require("@tiptap/react");
13
15
  var _prosemirrorState = require("prosemirror-state");
14
16
  var _RespArea = require("../icons/RespArea");
15
- var _reactDom = _interopRequireDefault(require("react-dom"));
16
17
  var _customToolbarWrapper = _interopRequireDefault(require("../../extensions/custom-toolbar-wrapper"));
17
18
  var _toolbar = require("../../utils/toolbar");
18
19
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
@@ -30,6 +31,7 @@ var InlineDropdown = function InlineDropdown(props) {
30
31
  var toolbarRef = (0, _react.useRef)(null);
31
32
  var toolbarEditor = (0, _react.useRef)(null);
32
33
  var pendingCloseRequest = (0, _react.useRef)(false);
34
+ var elementRef = (0, _react.useRef)(null);
33
35
  var isHeld = function isHeld() {
34
36
  return editor._holdInlineDropdownToolbarIndex != null && String(editor._holdInlineDropdownToolbarIndex) === String(node.attrs.index);
35
37
  };
@@ -45,10 +47,12 @@ var InlineDropdown = function InlineDropdown(props) {
45
47
  position = _useState4[0],
46
48
  setPosition = _useState4[1];
47
49
  var closeToolbar = function closeToolbar() {
50
+ var _options$onInlineDrop;
48
51
  if (isHeld()) {
49
52
  return;
50
53
  }
51
54
  setShowToolbar(false);
55
+ (_options$onInlineDrop = options.onInlineDropdownToolbarClose) === null || _options$onInlineDrop === void 0 || _options$onInlineDrop.call(options, editor);
52
56
  };
53
57
  var InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, closeToolbar);
54
58
  var reselectNode = function reselectNode() {
@@ -98,6 +102,11 @@ var InlineDropdown = function InlineDropdown(props) {
98
102
  var isScrollbarClicked = function isScrollbarClicked(event) {
99
103
  return event.clientX > document.documentElement.clientWidth || event.clientY > document.documentElement.clientHeight || event.target === document.documentElement;
100
104
  };
105
+ (0, _react.useEffect)(function () {
106
+ if (elementRef.current && typeof _mathRendering.renderMath === 'function') {
107
+ (0, _mathRendering.renderMath)(elementRef.current);
108
+ }
109
+ }, [value]);
101
110
  (0, _react.useEffect)(function () {
102
111
  // Calculate position relative to selection
103
112
  var bodyRect = document.body.getBoundingClientRect();
@@ -136,6 +145,7 @@ var InlineDropdown = function InlineDropdown(props) {
136
145
  cursor: 'pointer'
137
146
  }
138
147
  }, /*#__PURE__*/_react["default"].createElement("div", {
148
+ ref: elementRef,
139
149
  style: {
140
150
  display: 'inline-flex',
141
151
  minWidth: '178px',
@@ -1 +1 @@
1
- {"version":3,"file":"InlineDropdown.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","_prosemirrorState","_RespArea","_reactDom","_customToolbarWrapper","_toolbar","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","InlineDropdown","props","editor","node","getPos","options","selected","attributes","attrs","value","error","html","pos","toolbarRef","useRef","toolbarEditor","pendingCloseRequest","isHeld","_holdInlineDropdownToolbarIndex","String","index","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","_useState3","top","left","_useState4","position","setPosition","closeToolbar","InlineDropdownToolbar","respAreaToolbar","reselectNode","tr","state","nodeAtPos","doc","nodeAt","selection","from","to","nodeSize","setSelection","NodeSelection","create","view","dispatch","requestClose","current","onToolbarCloseRequest","setTimeout","useEffect","onlyThisNodeSelected","isScrollbarClicked","event","clientX","document","documentElement","clientWidth","clientY","clientHeight","target","bodyRect","body","getBoundingClientRect","start","coordsAtPos","Math","abs","handleClickOutside","_toolbarEditor$curren","insideSomeEditor","closest","dataset","toolbarFor","instanceId","_toolbarOpened","contains","addEventListener","removeEventListener","createElement","NodeViewWrapper","className","style","display","height","cursor","minWidth","background","border","boxSizing","borderRadius","margin","alignItems","onClick","flex","overflow","padding","whiteSpace","textOverflow","verticalAlign","dangerouslySetInnerHTML","__html","Chevron","direction","right","Fragment","ReactDOM","createPortal","ref","editorCallback","instance","_tiptapContainerEl","deletable","toolbarOpts","autoWidth","onDelete","setToolbarOpened","commands","focus","showDone","propTypes","PropTypes","object","selectedItem","oneOfType","string","_default","exports"],"sources":["../../../src/components/respArea/InlineDropdown.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { NodeSelection } from 'prosemirror-state';\nimport { Chevron } from '../icons/RespArea';\nimport ReactDOM from 'react-dom';\nimport CustomToolbarWrapper from '../../extensions/custom-toolbar-wrapper';\nimport { setToolbarOpened } from '../../utils/toolbar';\n\nconst InlineDropdown = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, error } = attributes;\n const html = value || '<div>&nbsp</div>';\n const pos = getPos();\n const toolbarRef = useRef(null);\n const toolbarEditor = useRef(null);\n const pendingCloseRequest = useRef(false);\n\n const isHeld = () =>\n editor._holdInlineDropdownToolbarIndex != null &&\n String(editor._holdInlineDropdownToolbarIndex) === String(node.attrs.index);\n\n const [showToolbar, setShowToolbar] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n const closeToolbar = () => {\n if (isHeld()) {\n return;\n }\n\n setShowToolbar(false);\n };\n\n const InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, closeToolbar);\n\n const reselectNode = () => {\n const { tr } = editor.state;\n const nodeAtPos = tr.doc.nodeAt(pos);\n\n if (!nodeAtPos) {\n return;\n }\n\n const { selection } = tr;\n\n if (selection.from === pos && selection.to === pos + nodeAtPos.nodeSize) {\n return;\n }\n\n tr.setSelection(NodeSelection.create(tr.doc, pos));\n editor.view.dispatch(tr);\n };\n\n const requestClose = () => {\n if (pendingCloseRequest.current) {\n return;\n }\n\n if (options.onToolbarCloseRequest) {\n pendingCloseRequest.current = true;\n\n options.onToolbarCloseRequest(\n [node, pos],\n editor,\n () => {\n pendingCloseRequest.current = false;\n delete editor._holdInlineDropdownToolbarIndex;\n closeToolbar();\n },\n () => {\n pendingCloseRequest.current = false;\n delete editor._holdInlineDropdownToolbarIndex;\n setShowToolbar(true);\n setTimeout(reselectNode, 0);\n },\n );\n } else {\n closeToolbar();\n }\n };\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(true);\n }\n } else if (showToolbar) {\n requestClose();\n }\n }, [editor, node, selected]);\n\n\n \n const isScrollbarClicked = (event) =>\n event.clientX > document.documentElement.clientWidth ||\n event.clientY > document.documentElement.clientHeight ||\n event.target === document.documentElement;\n \n\n useEffect(() => {\n // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n\n if( isScrollbarClicked(event) ) {\n return;\n }\n const insideSomeEditor = event.target.closest('[data-toolbar-for]');\n\n if (\n !event.target.closest('[data-inline-dropdown-toolbar]') &&\n (!insideSomeEditor || insideSomeEditor.dataset.toolbarFor !== toolbarEditor.current?.instanceId) &&\n !editor._toolbarOpened &&\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n requestClose();\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar, node]);\n\n return (\n <NodeViewWrapper\n className=\"inline-dropdown\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n height: '50px',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n margin: '0 2px',\n position: 'relative',\n alignItems: 'center',\n }}\n onClick={() => setShowToolbar(true)}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n <span\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </div>\n <Chevron direction=\"down\" style={{ position: 'absolute', top: '5px', right: '5px' }} />\n </div>\n {showToolbar && (\n <React.Fragment>\n {ReactDOM.createPortal(\n <div ref={toolbarRef}>\n <InlineDropdownToolbar\n editorCallback={(instance) => {\n toolbarEditor.current = instance;\n }}\n />\n </div>,\n editor?._tiptapContainerEl || document.body,\n )}\n\n {editor._tiptapContainerEl &&\n ReactDOM.createPortal(\n <CustomToolbarWrapper\n deletable\n toolbarOpts={{ minWidth: 'auto' }}\n autoWidth\n style={{ top: -40, left: 0, right: 0 }}\n onDelete={() => {\n const { tr } = editor.state;\n tr.delete(pos, pos + node.nodeSize);\n // Prevent the debounced onBlur/onDone from firing into the\n // now-deleted node's stale position\n setToolbarOpened(editor, false);\n delete editor._holdInlineDropdownToolbarIndex;\n editor.view.dispatch(tr);\n setShowToolbar(false);\n editor.commands.focus();\n }}\n showDone={false}\n />,\n editor._tiptapContainerEl,\n )}\n </React.Fragment>\n )}\n </NodeViewWrapper>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"InlineDropdown.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_mathRendering","_propTypes","_react2","_prosemirrorState","_RespArea","_customToolbarWrapper","_toolbar","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","InlineDropdown","props","editor","node","getPos","options","selected","attributes","attrs","value","error","html","pos","toolbarRef","useRef","toolbarEditor","pendingCloseRequest","elementRef","isHeld","_holdInlineDropdownToolbarIndex","String","index","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","_useState3","top","left","_useState4","position","setPosition","closeToolbar","_options$onInlineDrop","onInlineDropdownToolbarClose","InlineDropdownToolbar","respAreaToolbar","reselectNode","tr","state","nodeAtPos","doc","nodeAt","selection","from","to","nodeSize","setSelection","NodeSelection","create","view","dispatch","requestClose","current","onToolbarCloseRequest","setTimeout","useEffect","onlyThisNodeSelected","isScrollbarClicked","event","clientX","document","documentElement","clientWidth","clientY","clientHeight","target","renderMath","bodyRect","body","getBoundingClientRect","start","coordsAtPos","Math","abs","handleClickOutside","_toolbarEditor$curren","insideSomeEditor","closest","dataset","toolbarFor","instanceId","_toolbarOpened","contains","addEventListener","removeEventListener","createElement","NodeViewWrapper","className","style","display","height","cursor","ref","minWidth","background","border","boxSizing","borderRadius","margin","alignItems","onClick","flex","overflow","padding","whiteSpace","textOverflow","verticalAlign","dangerouslySetInnerHTML","__html","Chevron","direction","right","Fragment","ReactDOM","createPortal","editorCallback","instance","_tiptapContainerEl","deletable","toolbarOpts","autoWidth","onDelete","setToolbarOpened","commands","focus","showDone","propTypes","PropTypes","object","selectedItem","oneOfType","string","_default","exports"],"sources":["../../../src/components/respArea/InlineDropdown.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { NodeSelection } from 'prosemirror-state';\nimport { Chevron } from '../icons/RespArea';\nimport CustomToolbarWrapper from '../../extensions/custom-toolbar-wrapper';\nimport { setToolbarOpened } from '../../utils/toolbar';\n\nconst InlineDropdown = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, error } = attributes;\n const html = value || '<div>&nbsp</div>';\n const pos = getPos();\n const toolbarRef = useRef(null);\n const toolbarEditor = useRef(null);\n const pendingCloseRequest = useRef(false);\n const elementRef = useRef(null);\n\n const isHeld = () =>\n editor._holdInlineDropdownToolbarIndex != null &&\n String(editor._holdInlineDropdownToolbarIndex) === String(node.attrs.index);\n\n const [showToolbar, setShowToolbar] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n const closeToolbar = () => {\n if (isHeld()) {\n return;\n }\n\n setShowToolbar(false);\n options.onInlineDropdownToolbarClose?.(editor);\n };\n\n const InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, closeToolbar);\n\n const reselectNode = () => {\n const { tr } = editor.state;\n const nodeAtPos = tr.doc.nodeAt(pos);\n\n if (!nodeAtPos) {\n return;\n }\n\n const { selection } = tr;\n\n if (selection.from === pos && selection.to === pos + nodeAtPos.nodeSize) {\n return;\n }\n\n tr.setSelection(NodeSelection.create(tr.doc, pos));\n editor.view.dispatch(tr);\n };\n\n const requestClose = () => {\n if (pendingCloseRequest.current) {\n return;\n }\n\n if (options.onToolbarCloseRequest) {\n pendingCloseRequest.current = true;\n\n options.onToolbarCloseRequest(\n [node, pos],\n editor,\n () => {\n pendingCloseRequest.current = false;\n delete editor._holdInlineDropdownToolbarIndex;\n closeToolbar();\n },\n () => {\n pendingCloseRequest.current = false;\n delete editor._holdInlineDropdownToolbarIndex;\n setShowToolbar(true);\n setTimeout(reselectNode, 0);\n },\n );\n } else {\n closeToolbar();\n }\n };\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(true);\n }\n } else if (showToolbar) {\n requestClose();\n }\n }, [editor, node, selected]);\n\n const isScrollbarClicked = (event) =>\n event.clientX > document.documentElement.clientWidth ||\n event.clientY > document.documentElement.clientHeight ||\n event.target === document.documentElement;\n\n useEffect(() => {\n if (elementRef.current && typeof renderMath === 'function') {\n renderMath(elementRef.current);\n }\n }, [value]);\n\n useEffect(() => {\n // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n if (isScrollbarClicked(event)) {\n return;\n }\n\n const insideSomeEditor = event.target.closest('[data-toolbar-for]');\n\n if (\n !event.target.closest('[data-inline-dropdown-toolbar]') &&\n (!insideSomeEditor || insideSomeEditor.dataset.toolbarFor !== toolbarEditor.current?.instanceId) &&\n !editor._toolbarOpened &&\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n requestClose();\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar, node]);\n\n return (\n <NodeViewWrapper\n className=\"inline-dropdown\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n height: '50px',\n cursor: 'pointer',\n }}\n >\n <div\n ref={elementRef}\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n margin: '0 2px',\n position: 'relative',\n alignItems: 'center',\n }}\n onClick={() => setShowToolbar(true)}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n <span\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </div>\n <Chevron direction=\"down\" style={{ position: 'absolute', top: '5px', right: '5px' }} />\n </div>\n {showToolbar && (\n <React.Fragment>\n {ReactDOM.createPortal(\n <div ref={toolbarRef}>\n <InlineDropdownToolbar\n editorCallback={(instance) => {\n toolbarEditor.current = instance;\n }}\n />\n </div>,\n editor?._tiptapContainerEl || document.body,\n )}\n\n {editor._tiptapContainerEl &&\n ReactDOM.createPortal(\n <CustomToolbarWrapper\n deletable\n toolbarOpts={{ minWidth: 'auto' }}\n autoWidth\n style={{ top: -40, left: 0, right: 0 }}\n onDelete={() => {\n const { tr } = editor.state;\n tr.delete(pos, pos + node.nodeSize);\n // Prevent the debounced onBlur/onDone from firing into the\n // now-deleted node's stale position\n setToolbarOpened(editor, false);\n delete editor._holdInlineDropdownToolbarIndex;\n editor.view.dispatch(tr);\n setShowToolbar(false);\n editor.commands.focus();\n }}\n showDone={false}\n />,\n editor._tiptapContainerEl,\n )}\n </React.Fragment>\n )}\n </NodeViewWrapper>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -220,7 +220,8 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
220
220
  updateAttributes = props.updateAttributes,
221
221
  editor = props.editor,
222
222
  selected = props.selected,
223
- options = props.options;
223
+ options = props.options,
224
+ getPos = props.getPos;
224
225
  var _useState = (0, _react.useState)(selected),
225
226
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
226
227
  showToolbar = _useState2[0],
@@ -251,20 +252,33 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
251
252
  latex: newLatex
252
253
  });
253
254
  };
255
+
256
+ // moveCursorAfterNode is set explicitly by the caller (not inferred from
257
+ // editor.state.selection: every keystroke while editing already calls
258
+ // updateAttributes, which replaces this node's content and — per a
259
+ // ProseMirror mapping quirk — collapses any NodeSelection on it into a
260
+ // plain TextSelection right away, so the live selection can't be trusted
261
+ // to still describe this node by the time handleDone runs).
262
+ //
263
+ // - Check icon: always move the cursor to just after this node.
264
+ // - Clicking elsewhere in the editable content while the toolbar was
265
+ // open (see handleClickOutside): leave the cursor where the user
266
+ // actually clicked instead of overriding it.
254
267
  var handleDone = function handleDone(newLatex) {
268
+ var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
269
+ _ref4$moveCursorAfter = _ref4.moveCursorAfterNode,
270
+ moveCursorAfterNode = _ref4$moveCursorAfter === void 0 ? true : _ref4$moveCursorAfter;
255
271
  updateAttributes({
256
272
  latex: newLatex
257
273
  });
258
274
  setShowToolbar(false);
259
- var _editor$state = editor.state,
260
- selection = _editor$state.selection,
261
- tr = _editor$state.tr,
262
- doc = _editor$state.doc;
263
- var sel = _prosemirrorState.TextSelection.create(doc, selection.from + 1);
264
-
265
- // Build a fresh transaction from the current state and set the selection
266
- tr.setSelection(sel);
267
- editor.view.dispatch(tr);
275
+ if (moveCursorAfterNode && typeof getPos === 'function') {
276
+ var pos = getPos();
277
+ var doc = editor.state.doc;
278
+ var sel = _prosemirrorState.TextSelection.create(doc, pos + node.nodeSize);
279
+ var tr = editor.state.tr.setSelection(sel);
280
+ editor.view.dispatch(tr);
281
+ }
268
282
  editor.commands.focus();
269
283
  };
270
284
 
@@ -368,8 +382,20 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
368
382
  // event cycle and close the toolbar before it could open.
369
383
  var clickedMathNode = !!(target !== null && target !== void 0 && (_target$closest2 = target.closest) !== null && _target$closest2 !== void 0 && _target$closest2.call(target, ".math-node-".concat(timestamp.current)));
370
384
  if (toolbarRef.current && !toolbarRef.current.contains(target) && !(target !== null && target !== void 0 && (_target$closest3 = target.closest) !== null && _target$closest3 !== void 0 && _target$closest3.call(target, '[data-inline-node]')) && !equationEditorPopoverOpen && !clickedEquationEditorSelect && !clickedMathNode) {
385
+ var _editor$view;
371
386
  setShowToolbar(false);
372
- handleDone(node.attrs.latex);
387
+
388
+ // If the click landed inside the editable content itself, respect
389
+ // it and leave the cursor where the user clicked. If it landed
390
+ // fully outside the editor (e.g. on other page UI), there's no
391
+ // click position to preserve — falling back to "leave selection
392
+ // untouched" there renders the browser's native NodeSelection
393
+ // fallback caret at the start of the node, so explicitly move the
394
+ // cursor after it instead, same as the check-icon path.
395
+ var clickedInsideEditableContent = !!(editor !== null && editor !== void 0 && (_editor$view = editor.view) !== null && _editor$view !== void 0 && (_editor$view = _editor$view.dom) !== null && _editor$view !== void 0 && _editor$view.contains(target));
396
+ handleDone(node.attrs.latex, {
397
+ moveCursorAfterNode: !clickedInsideEditableContent
398
+ });
373
399
  }
374
400
  };
375
401
  if (showToolbar) {
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_prosemirrorState","_mathToolbar","_mathRendering","_toolbar","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","ensureTextAfterMathPluginKey","PluginKey","generateAdditionalKeys","keyData","undefined","map","key","name","latex","write","label","EnsureTextAfterMathPlugin","exports","mathNodeName","Plugin","appendTransaction","transactions","oldState","newState","some","tr","docChanged","changed","doc","descendants","node","pos","type","nextPos","nodeSize","nextNode","nodeAt","insert","schema","text","nodeBeforeZeroWidthSpace","from","_currentDoc$type","_currentDoc$type2","currentDoc","textContent","ZeroWidthSpaceHandlingPlugin","props","handleKeyDown","view","event","state","dispatch","selection","empty","start","resolved","resolve","maybeNode","nodeAfter","nodeBefore","nodeResolved","setSelection","NodeSelection","create","TextSelection","MathNode","Node","group","inline","atom","addAttributes","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","innerHTML","addCommands","_this","insertMath","_ref","_node$type","editor","nodes","math","$from","sel","setToolbarOpened","renderHTML","_ref2","HTMLAttributes","dangerouslySetInnerHTML","__html","wrapMath","addNodeView","_this2","ReactNodeViewRenderer","createElement","MathNodeView","options","updateAttributes","selected","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","toolbarRef","useRef","nodeRef","timestamp","Date","now","_useState3","top","left","_useState4","position","setPosition","_ref3","_ref3$math","mathOptions","keypadMode","_mathOptions$controll","controlledKeypadMode","_mathOptions$customKe","customKeys","keyPadCharacterRef","setKeypadInteraction","attrs","handleChange","newLatex","handleDone","_editor$state","commands","focus","useEffect","_selection$node","isNodeSelected","updatePosition","_nodeRef$current","_nodeRef$current$getB","_start$bottom","current","coordsAtPos","nodeRect","getBoundingClientRect","anchorTop","height","anchorLeft","width","anchorBottom","bottom","toolbarHeight","offsetHeight","toolbarWidth","offsetWidth","gap","spaceBelow","window","innerHeight","margin","Math","max","min","innerWidth","portalEl","_tiptapContainerEl","document","body","containerRect","frame","scheduleUpdate","requestAnimationFrame","addEventListener","cancelAnimationFrame","removeEventListener","handleClickOutside","_document$querySelect","_document","_target$closest","_target$closest2","_target$closest3","target","equationEditorListboxes","querySelectorAll","equationEditorPopoverOpen","clickedEquationEditorSelect","id","includes","closest","clickedMathNode","concat","contains","NodeViewWrapper","className","style","display","cursor","ref","onClick","contentEditable","MathPreview","ReactDOM","createPortal","instanceId","zIndex","background","boxShadow","MathToolbar","autoFocus","onChange","onDone","additionalKeys"],"sources":["../../src/extensions/math.js"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Node } from '@tiptap/core';\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';\nimport { NodeSelection, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath } from '@pie-lib/math-rendering';\nimport { setToolbarOpened } from '../utils/toolbar';\n\nconst ensureTextAfterMathPluginKey = new PluginKey('ensureTextAfterMath');\n\nconst generateAdditionalKeys = (keyData = []) => {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n};\n\nexport const EnsureTextAfterMathPlugin = (mathNodeName) =>\n new Plugin({\n key: ensureTextAfterMathPluginKey,\n appendTransaction: (transactions, oldState, newState) => {\n // Only act when the doc actually changed\n if (!transactions.some((tr) => tr.docChanged)) {\n return null;\n }\n\n const tr = newState.tr;\n let changed = false;\n\n newState.doc.descendants((node, pos) => {\n if (node.type.name === mathNodeName) {\n const nextPos = pos + node.nodeSize;\n const nextNode = newState.doc.nodeAt(nextPos);\n\n // If there's no node after, or the next node isn't text, insert a space\n if (!nextNode || nextNode.type.name !== 'text') {\n tr.insert(nextPos, newState.schema.text('\\u200b'));\n changed = true;\n }\n }\n });\n\n return changed ? tr : null;\n },\n });\n\nconst nodeBeforeZeroWidthSpace = (doc, from) => {\n let i;\n\n // finding if previous to the cursor there's a zero-width space\n // and a non-text element, and deleting everything until the space\n for (i = from; i > 0; i--) {\n const currentDoc = doc.nodeAt(i);\n\n if (currentDoc?.type?.name === 'text' && currentDoc.textContent !== '\\u200b') {\n return -1;\n }\n\n if (currentDoc && currentDoc?.type?.name !== 'text') {\n break;\n }\n }\n\n return i;\n};\n\nexport const ZeroWidthSpaceHandlingPlugin = new Plugin({\n key: new PluginKey('zeroWidthSpaceHandling'),\n props: {\n handleKeyDown(view, event) {\n const { state, dispatch } = view;\n const { selection, doc } = state;\n const { from, empty } = selection;\n\n if (empty && event.key === 'Backspace' && from > 0) {\n const start = nodeBeforeZeroWidthSpace(doc, from);\n\n if (start === -1) {\n return false;\n }\n\n const tr = state.tr.delete(start, from);\n dispatch(tr);\n return true; // handled\n }\n\n if (empty && event.key === 'ArrowLeft' && from > 0) {\n const start = nodeBeforeZeroWidthSpace(doc, from);\n\n if (start === -1) {\n return false;\n }\n\n const resolved = state.doc.resolve(start);\n const maybeNode = resolved.nodeAfter || resolved.nodeBefore;\n\n // Check if there's an inline selectable node (e.g., your math node)\n if (maybeNode) {\n const nodeResolved = state.doc.resolve(start);\n const tr = state.tr.setSelection(NodeSelection.create(state.doc, nodeResolved.pos));\n dispatch(tr);\n return true;\n } else {\n // Just move the text cursor before the zwsp\n const tr = state.tr.setSelection(TextSelection.create(state.doc, from - 2));\n dispatch(tr);\n return true;\n }\n }\n\n return false;\n },\n },\n});\n\nexport const MathNode = Node.create({\n name: 'math',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n latex: { default: '' },\n wrapper: { default: null },\n html: { default: null },\n };\n },\n\n addProseMirrorPlugins() {\n return [EnsureTextAfterMathPlugin(this.name), ZeroWidthSpaceHandlingPlugin];\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-latex]',\n getAttrs: (el) => ({\n latex: el.getAttribute('data-raw') || el.textContent,\n }),\n },\n {\n tag: 'span[data-type=\"mathml\"]',\n getAttrs: (el) => ({\n html: el.innerHTML,\n }),\n },\n ];\n },\n\n addCommands() {\n return {\n insertMath:\n (latex = '') =>\n ({ tr, editor, dispatch }) => {\n const { state } = editor.view;\n const node = state.schema.nodes.math.create({\n latex,\n });\n const { selection } = state;\n\n // The inserted node is typically just before the cursor\n const pos = selection.$from.pos;\n\n tr.insert(pos, node);\n\n if (node?.type?.name === this.name) {\n // Create a NodeSelection from the current doc\n const sel = NodeSelection.create(tr.doc, selection.$from.pos);\n\n // Build a fresh transaction from the current state and set the selection\n tr.setSelection(sel);\n }\n\n dispatch(tr);\n\n setToolbarOpened(editor, true);\n return true;\n },\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n if (HTMLAttributes.html) {\n return ['span', { 'data-type': 'mathml', dangerouslySetInnerHTML: { __html: HTMLAttributes.html } }];\n }\n\n return [\n 'span',\n { 'data-latex': '', 'data-raw': HTMLAttributes.latex },\n wrapMath(HTMLAttributes.latex, HTMLAttributes.wrapper),\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MathNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nexport const MathNodeView = (props) => {\n const { node, updateAttributes, editor, selected, options } = props;\n const [showToolbar, setShowToolbar] = useState(selected);\n const toolbarRef = useRef(null);\n const nodeRef = useRef(null);\n const timestamp = useRef(Date.now());\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { math: mathOptions = {} } = options || {};\n const {\n keypadMode,\n controlledKeypadMode = true,\n customKeys = [],\n keyPadCharacterRef,\n setKeypadInteraction,\n } = mathOptions;\n\n const latex = node.attrs.latex || '';\n\n const handleChange = (newLatex) => {\n updateAttributes({ latex: newLatex });\n };\n\n const handleDone = (newLatex) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n\n const { selection, tr, doc } = editor.state;\n const sel = TextSelection.create(doc, selection.from + 1);\n\n // Build a fresh transaction from the current state and set the selection\n tr.setSelection(sel);\n editor.view.dispatch(tr);\n editor.commands.focus();\n };\n\n // Only open the toolbar when this node is *explicitly* selected\n // via a NodeSelection — not when it's merely included in a broader\n // TextSelection or AllSelection (e.g. click-drag across math, or Cmd+A).\n useEffect(() => {\n if (!selected) return;\n\n const { selection } = editor.state;\n const isNodeSelected = selection.node?.type?.name === 'math';\n\n if (isNodeSelected) {\n setShowToolbar(true);\n }\n }, [selected, editor]);\n\n useEffect(() => {\n setToolbarOpened(editor, selected || showToolbar);\n }, [editor, showToolbar, selected]);\n\n useEffect(() => {\n if (!editor || !showToolbar) {\n setPosition({ top: 0, left: 0 });\n return;\n }\n\n // Clamp in viewport coordinates, then convert to portal-container-relative values\n // for position: absolute (toolbar is portaled into _tiptapContainerEl or document.body).\n const updatePosition = () => {\n if (!toolbarRef.current) {\n return;\n }\n\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n const nodeRect = nodeRef.current?.getBoundingClientRect?.();\n\n // Anchor to the math node element when available; fall back to selection coords.\n const anchorTop = nodeRect?.height ? nodeRect.top : start.top;\n const anchorLeft = nodeRect?.width ? nodeRect.left : start.left;\n const anchorBottom = nodeRect?.height ? nodeRect.bottom : (start.bottom ?? start.top);\n\n const toolbarHeight = toolbarRef.current.offsetHeight;\n const toolbarWidth = toolbarRef.current.offsetWidth;\n\n const gap = 0;\n const spaceBelow = window.innerHeight - (anchorBottom + gap);\n\n // Place the toolbar's top-left corner directly below the anchor; flip above when needed.\n let top = spaceBelow >= toolbarHeight ? anchorBottom + gap : anchorTop - toolbarHeight - gap;\n let left = anchorLeft;\n\n const margin = 8;\n top = Math.max(margin, Math.min(top, window.innerHeight - toolbarHeight - margin));\n left = Math.max(margin, Math.min(left, window.innerWidth - toolbarWidth - margin));\n\n const portalEl = editor._tiptapContainerEl || document.body;\n const containerRect = portalEl.getBoundingClientRect();\n\n setPosition({\n top: top - containerRect.top,\n left: left - containerRect.left,\n });\n };\n\n updatePosition();\n\n let frame = null;\n const scheduleUpdate = () => {\n if (frame !== null) {\n return;\n }\n\n frame = requestAnimationFrame(() => {\n frame = null;\n updatePosition();\n });\n };\n\n frame = requestAnimationFrame(() => {\n frame = null;\n updatePosition();\n });\n\n window.addEventListener('scroll', scheduleUpdate, true);\n window.addEventListener('resize', scheduleUpdate);\n\n return () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n }\n\n window.removeEventListener('scroll', scheduleUpdate, true);\n window.removeEventListener('resize', scheduleUpdate);\n };\n }, [editor, showToolbar]);\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n const target = event?.target;\n\n // MUI's `Select` renders its dropdown options in a portal attached to `document.body`.\n // Those clicks should not dismiss the math toolbar.\n const equationEditorListboxes =\n document.querySelectorAll?.(\n '[id^=\"equation-editor-select\"][id*=\"listbox\"], [aria-labelledby=\"equation-editor-label\"][role=\"listbox\"]',\n ) || [];\n\n const equationEditorPopoverOpen = equationEditorListboxes.length > 0;\n const clickedEquationEditorSelect =\n !!(target?.id && target.id.includes('equation-editor-select')) ||\n !!target?.closest?.('[id*=\"equation-editor-select\"]');\n\n // If the click originated from the math node preview itself (the element\n // that opens the toolbar), ignore it here — the node's own onClick handler\n // will keep/re-open the toolbar. Without this guard, closing and then\n // immediately clicking the math node would fire this listener in the same\n // event cycle and close the toolbar before it could open.\n const clickedMathNode = !!target?.closest?.(`.math-node-${timestamp.current}`);\n\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(target) &&\n !target?.closest?.('[data-inline-node]') &&\n !equationEditorPopoverOpen &&\n !clickedEquationEditorSelect &&\n !clickedMathNode\n ) {\n setShowToolbar(false);\n handleDone(node.attrs.latex);\n }\n };\n\n if (showToolbar) {\n // Use `click` (not `mousedown`) so interacting with browser UI like the scrollbar\n // doesn't automatically dismiss the math toolbar.\n document.addEventListener('click', handleClickOutside);\n } else {\n document.removeEventListener('click', handleClickOutside);\n }\n\n return () => document.removeEventListener('click', handleClickOutside);\n }, [editor, showToolbar, node]);\n\n return (\n <NodeViewWrapper\n className={`math-node-${timestamp.current}`}\n style={{\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n }}\n data-selected={selected}\n >\n <div ref={nodeRef} onClick={() => setShowToolbar(true)} contentEditable={false}>\n <MathPreview latex={latex} />\n </div>\n {showToolbar &&\n ReactDOM.createPortal(\n <div\n ref={toolbarRef}\n data-toolbar-for={editor.instanceId}\n style={{\n position: 'absolute',\n top: `${position.top}px`,\n left: `${position.left}px`,\n zIndex: 1000,\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n }}\n >\n <MathToolbar\n latex={latex}\n autoFocus\n onChange={handleChange}\n onDone={handleDone}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n additionalKeys={generateAdditionalKeys(customKeys)}\n keyPadCharacterRef={keyPadCharacterRef}\n setKeypadInteraction={setKeypadInteraction}\n />\n </div>,\n editor?._tiptapContainerEl || document.body,\n )}\n </NodeViewWrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"math.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_prosemirrorState","_mathToolbar","_mathRendering","_toolbar","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","ensureTextAfterMathPluginKey","PluginKey","generateAdditionalKeys","keyData","undefined","map","key","name","latex","write","label","EnsureTextAfterMathPlugin","exports","mathNodeName","Plugin","appendTransaction","transactions","oldState","newState","some","tr","docChanged","changed","doc","descendants","node","pos","type","nextPos","nodeSize","nextNode","nodeAt","insert","schema","text","nodeBeforeZeroWidthSpace","from","_currentDoc$type","_currentDoc$type2","currentDoc","textContent","ZeroWidthSpaceHandlingPlugin","props","handleKeyDown","view","event","state","dispatch","selection","empty","start","resolved","resolve","maybeNode","nodeAfter","nodeBefore","nodeResolved","setSelection","NodeSelection","create","TextSelection","MathNode","Node","group","inline","atom","addAttributes","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","innerHTML","addCommands","_this","insertMath","_ref","_node$type","editor","nodes","math","$from","sel","setToolbarOpened","renderHTML","_ref2","HTMLAttributes","dangerouslySetInnerHTML","__html","wrapMath","addNodeView","_this2","ReactNodeViewRenderer","createElement","MathNodeView","options","updateAttributes","selected","getPos","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","toolbarRef","useRef","nodeRef","timestamp","Date","now","_useState3","top","left","_useState4","position","setPosition","_ref3","_ref3$math","mathOptions","keypadMode","_mathOptions$controll","controlledKeypadMode","_mathOptions$customKe","customKeys","keyPadCharacterRef","setKeypadInteraction","attrs","handleChange","newLatex","handleDone","_ref4","_ref4$moveCursorAfter","moveCursorAfterNode","commands","focus","useEffect","_selection$node","isNodeSelected","updatePosition","_nodeRef$current","_nodeRef$current$getB","_start$bottom","current","coordsAtPos","nodeRect","getBoundingClientRect","anchorTop","height","anchorLeft","width","anchorBottom","bottom","toolbarHeight","offsetHeight","toolbarWidth","offsetWidth","gap","spaceBelow","window","innerHeight","margin","Math","max","min","innerWidth","portalEl","_tiptapContainerEl","document","body","containerRect","frame","scheduleUpdate","requestAnimationFrame","addEventListener","cancelAnimationFrame","removeEventListener","handleClickOutside","_document$querySelect","_document","_target$closest","_target$closest2","_target$closest3","target","equationEditorListboxes","querySelectorAll","equationEditorPopoverOpen","clickedEquationEditorSelect","id","includes","closest","clickedMathNode","concat","contains","_editor$view","clickedInsideEditableContent","dom","NodeViewWrapper","className","style","display","cursor","ref","onClick","contentEditable","MathPreview","ReactDOM","createPortal","instanceId","zIndex","background","boxShadow","MathToolbar","autoFocus","onChange","onDone","additionalKeys"],"sources":["../../src/extensions/math.js"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Node } from '@tiptap/core';\nimport { NodeViewWrapper, ReactNodeViewRenderer } from '@tiptap/react';\nimport { NodeSelection, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath } from '@pie-lib/math-rendering';\nimport { setToolbarOpened } from '../utils/toolbar';\n\nconst ensureTextAfterMathPluginKey = new PluginKey('ensureTextAfterMath');\n\nconst generateAdditionalKeys = (keyData = []) => {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n};\n\nexport const EnsureTextAfterMathPlugin = (mathNodeName) =>\n new Plugin({\n key: ensureTextAfterMathPluginKey,\n appendTransaction: (transactions, oldState, newState) => {\n // Only act when the doc actually changed\n if (!transactions.some((tr) => tr.docChanged)) {\n return null;\n }\n\n const tr = newState.tr;\n let changed = false;\n\n newState.doc.descendants((node, pos) => {\n if (node.type.name === mathNodeName) {\n const nextPos = pos + node.nodeSize;\n const nextNode = newState.doc.nodeAt(nextPos);\n\n // If there's no node after, or the next node isn't text, insert a space\n if (!nextNode || nextNode.type.name !== 'text') {\n tr.insert(nextPos, newState.schema.text('\\u200b'));\n changed = true;\n }\n }\n });\n\n return changed ? tr : null;\n },\n });\n\nconst nodeBeforeZeroWidthSpace = (doc, from) => {\n let i;\n\n // finding if previous to the cursor there's a zero-width space\n // and a non-text element, and deleting everything until the space\n for (i = from; i > 0; i--) {\n const currentDoc = doc.nodeAt(i);\n\n if (currentDoc?.type?.name === 'text' && currentDoc.textContent !== '\\u200b') {\n return -1;\n }\n\n if (currentDoc && currentDoc?.type?.name !== 'text') {\n break;\n }\n }\n\n return i;\n};\n\nexport const ZeroWidthSpaceHandlingPlugin = new Plugin({\n key: new PluginKey('zeroWidthSpaceHandling'),\n props: {\n handleKeyDown(view, event) {\n const { state, dispatch } = view;\n const { selection, doc } = state;\n const { from, empty } = selection;\n\n if (empty && event.key === 'Backspace' && from > 0) {\n const start = nodeBeforeZeroWidthSpace(doc, from);\n\n if (start === -1) {\n return false;\n }\n\n const tr = state.tr.delete(start, from);\n dispatch(tr);\n return true; // handled\n }\n\n if (empty && event.key === 'ArrowLeft' && from > 0) {\n const start = nodeBeforeZeroWidthSpace(doc, from);\n\n if (start === -1) {\n return false;\n }\n\n const resolved = state.doc.resolve(start);\n const maybeNode = resolved.nodeAfter || resolved.nodeBefore;\n\n // Check if there's an inline selectable node (e.g., your math node)\n if (maybeNode) {\n const nodeResolved = state.doc.resolve(start);\n const tr = state.tr.setSelection(NodeSelection.create(state.doc, nodeResolved.pos));\n dispatch(tr);\n return true;\n } else {\n // Just move the text cursor before the zwsp\n const tr = state.tr.setSelection(TextSelection.create(state.doc, from - 2));\n dispatch(tr);\n return true;\n }\n }\n\n return false;\n },\n },\n});\n\nexport const MathNode = Node.create({\n name: 'math',\n group: 'inline',\n inline: true,\n atom: true,\n\n addAttributes() {\n return {\n latex: { default: '' },\n wrapper: { default: null },\n html: { default: null },\n };\n },\n\n addProseMirrorPlugins() {\n return [EnsureTextAfterMathPlugin(this.name), ZeroWidthSpaceHandlingPlugin];\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[data-latex]',\n getAttrs: (el) => ({\n latex: el.getAttribute('data-raw') || el.textContent,\n }),\n },\n {\n tag: 'span[data-type=\"mathml\"]',\n getAttrs: (el) => ({\n html: el.innerHTML,\n }),\n },\n ];\n },\n\n addCommands() {\n return {\n insertMath:\n (latex = '') =>\n ({ tr, editor, dispatch }) => {\n const { state } = editor.view;\n const node = state.schema.nodes.math.create({\n latex,\n });\n const { selection } = state;\n\n // The inserted node is typically just before the cursor\n const pos = selection.$from.pos;\n\n tr.insert(pos, node);\n\n if (node?.type?.name === this.name) {\n // Create a NodeSelection from the current doc\n const sel = NodeSelection.create(tr.doc, selection.$from.pos);\n\n // Build a fresh transaction from the current state and set the selection\n tr.setSelection(sel);\n }\n\n dispatch(tr);\n\n setToolbarOpened(editor, true);\n return true;\n },\n };\n },\n\n renderHTML({ HTMLAttributes }) {\n if (HTMLAttributes.html) {\n return ['span', { 'data-type': 'mathml', dangerouslySetInnerHTML: { __html: HTMLAttributes.html } }];\n }\n\n return [\n 'span',\n { 'data-latex': '', 'data-raw': HTMLAttributes.latex },\n wrapMath(HTMLAttributes.latex, HTMLAttributes.wrapper),\n ];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MathNodeView {...{ ...props, options: this.options }} />);\n },\n});\n\nexport const MathNodeView = (props) => {\n const { node, updateAttributes, editor, selected, options, getPos } = props;\n const [showToolbar, setShowToolbar] = useState(selected);\n const toolbarRef = useRef(null);\n const nodeRef = useRef(null);\n const timestamp = useRef(Date.now());\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const { math: mathOptions = {} } = options || {};\n const {\n keypadMode,\n controlledKeypadMode = true,\n customKeys = [],\n keyPadCharacterRef,\n setKeypadInteraction,\n } = mathOptions;\n\n const latex = node.attrs.latex || '';\n\n const handleChange = (newLatex) => {\n updateAttributes({ latex: newLatex });\n };\n\n // moveCursorAfterNode is set explicitly by the caller (not inferred from\n // editor.state.selection: every keystroke while editing already calls\n // updateAttributes, which replaces this node's content and — per a\n // ProseMirror mapping quirk — collapses any NodeSelection on it into a\n // plain TextSelection right away, so the live selection can't be trusted\n // to still describe this node by the time handleDone runs).\n //\n // - Check icon: always move the cursor to just after this node.\n // - Clicking elsewhere in the editable content while the toolbar was\n // open (see handleClickOutside): leave the cursor where the user\n // actually clicked instead of overriding it.\n const handleDone = (newLatex, { moveCursorAfterNode = true } = {}) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n\n if (moveCursorAfterNode && typeof getPos === 'function') {\n const pos = getPos();\n const { doc } = editor.state;\n const sel = TextSelection.create(doc, pos + node.nodeSize);\n const tr = editor.state.tr.setSelection(sel);\n editor.view.dispatch(tr);\n }\n\n editor.commands.focus();\n };\n\n // Only open the toolbar when this node is *explicitly* selected\n // via a NodeSelection — not when it's merely included in a broader\n // TextSelection or AllSelection (e.g. click-drag across math, or Cmd+A).\n useEffect(() => {\n if (!selected) return;\n\n const { selection } = editor.state;\n const isNodeSelected = selection.node?.type?.name === 'math';\n\n if (isNodeSelected) {\n setShowToolbar(true);\n }\n }, [selected, editor]);\n\n useEffect(() => {\n setToolbarOpened(editor, selected || showToolbar);\n }, [editor, showToolbar, selected]);\n\n useEffect(() => {\n if (!editor || !showToolbar) {\n setPosition({ top: 0, left: 0 });\n return;\n }\n\n // Clamp in viewport coordinates, then convert to portal-container-relative values\n // for position: absolute (toolbar is portaled into _tiptapContainerEl or document.body).\n const updatePosition = () => {\n if (!toolbarRef.current) {\n return;\n }\n\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n const nodeRect = nodeRef.current?.getBoundingClientRect?.();\n\n // Anchor to the math node element when available; fall back to selection coords.\n const anchorTop = nodeRect?.height ? nodeRect.top : start.top;\n const anchorLeft = nodeRect?.width ? nodeRect.left : start.left;\n const anchorBottom = nodeRect?.height ? nodeRect.bottom : (start.bottom ?? start.top);\n\n const toolbarHeight = toolbarRef.current.offsetHeight;\n const toolbarWidth = toolbarRef.current.offsetWidth;\n\n const gap = 0;\n const spaceBelow = window.innerHeight - (anchorBottom + gap);\n\n // Place the toolbar's top-left corner directly below the anchor; flip above when needed.\n let top = spaceBelow >= toolbarHeight ? anchorBottom + gap : anchorTop - toolbarHeight - gap;\n let left = anchorLeft;\n\n const margin = 8;\n top = Math.max(margin, Math.min(top, window.innerHeight - toolbarHeight - margin));\n left = Math.max(margin, Math.min(left, window.innerWidth - toolbarWidth - margin));\n\n const portalEl = editor._tiptapContainerEl || document.body;\n const containerRect = portalEl.getBoundingClientRect();\n\n setPosition({\n top: top - containerRect.top,\n left: left - containerRect.left,\n });\n };\n\n updatePosition();\n\n let frame = null;\n const scheduleUpdate = () => {\n if (frame !== null) {\n return;\n }\n\n frame = requestAnimationFrame(() => {\n frame = null;\n updatePosition();\n });\n };\n\n frame = requestAnimationFrame(() => {\n frame = null;\n updatePosition();\n });\n\n window.addEventListener('scroll', scheduleUpdate, true);\n window.addEventListener('resize', scheduleUpdate);\n\n return () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n }\n\n window.removeEventListener('scroll', scheduleUpdate, true);\n window.removeEventListener('resize', scheduleUpdate);\n };\n }, [editor, showToolbar]);\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n const target = event?.target;\n\n // MUI's `Select` renders its dropdown options in a portal attached to `document.body`.\n // Those clicks should not dismiss the math toolbar.\n const equationEditorListboxes =\n document.querySelectorAll?.(\n '[id^=\"equation-editor-select\"][id*=\"listbox\"], [aria-labelledby=\"equation-editor-label\"][role=\"listbox\"]',\n ) || [];\n\n const equationEditorPopoverOpen = equationEditorListboxes.length > 0;\n const clickedEquationEditorSelect =\n !!(target?.id && target.id.includes('equation-editor-select')) ||\n !!target?.closest?.('[id*=\"equation-editor-select\"]');\n\n // If the click originated from the math node preview itself (the element\n // that opens the toolbar), ignore it here — the node's own onClick handler\n // will keep/re-open the toolbar. Without this guard, closing and then\n // immediately clicking the math node would fire this listener in the same\n // event cycle and close the toolbar before it could open.\n const clickedMathNode = !!target?.closest?.(`.math-node-${timestamp.current}`);\n\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(target) &&\n !target?.closest?.('[data-inline-node]') &&\n !equationEditorPopoverOpen &&\n !clickedEquationEditorSelect &&\n !clickedMathNode\n ) {\n setShowToolbar(false);\n\n // If the click landed inside the editable content itself, respect\n // it and leave the cursor where the user clicked. If it landed\n // fully outside the editor (e.g. on other page UI), there's no\n // click position to preserve — falling back to \"leave selection\n // untouched\" there renders the browser's native NodeSelection\n // fallback caret at the start of the node, so explicitly move the\n // cursor after it instead, same as the check-icon path.\n const clickedInsideEditableContent = !!editor?.view?.dom?.contains(target);\n handleDone(node.attrs.latex, { moveCursorAfterNode: !clickedInsideEditableContent });\n }\n };\n\n if (showToolbar) {\n // Use `click` (not `mousedown`) so interacting with browser UI like the scrollbar\n // doesn't automatically dismiss the math toolbar.\n document.addEventListener('click', handleClickOutside);\n } else {\n document.removeEventListener('click', handleClickOutside);\n }\n\n return () => document.removeEventListener('click', handleClickOutside);\n }, [editor, showToolbar, node]);\n\n return (\n <NodeViewWrapper\n className={`math-node-${timestamp.current}`}\n style={{\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n }}\n data-selected={selected}\n >\n <div ref={nodeRef} onClick={() => setShowToolbar(true)} contentEditable={false}>\n <MathPreview latex={latex} />\n </div>\n {showToolbar &&\n ReactDOM.createPortal(\n <div\n ref={toolbarRef}\n data-toolbar-for={editor.instanceId}\n style={{\n position: 'absolute',\n top: `${position.top}px`,\n left: `${position.left}px`,\n zIndex: 1000,\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n boxShadow:\n '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',\n }}\n >\n <MathToolbar\n latex={latex}\n autoFocus\n onChange={handleChange}\n onDone={handleDone}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n additionalKeys={generateAdditionalKeys(customKeys)}\n keyPadCharacterRef={keyPadCharacterRef}\n setKeypadInteraction={setKeypadInteraction}\n />\n </div>,\n editor?._tiptapContainerEl || document.body,\n )}\n </NodeViewWrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.1.9",
6
+ "version": "2.1.10",
7
7
  "description": "",
8
8
  "license": "ISC",
9
9
  "main": "lib/index.js",
@@ -59,6 +59,6 @@
59
59
  "peerDependencies": {
60
60
  "react": "^18.2.0"
61
61
  },
62
- "gitHead": "53796293aa3d939290388614fd6d4467fb81b178",
62
+ "gitHead": "71d88b032a54ee9ffca51add8c0341a9e1ef780f",
63
63
  "scripts": {}
64
64
  }
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { render, waitFor } from '@testing-library/react';
3
3
  import { useEditor } from '@tiptap/react';
4
4
  import { EditableHtml } from '../components/EditableHtml';
5
+ import { InlineDropdownNode } from '../extensions/responseArea';
5
6
 
6
7
  // Mock TipTap dependencies
7
8
  jest.mock('@tiptap/react', () => ({
@@ -210,6 +211,39 @@ describe('EditableHtml', () => {
210
211
  expect(container).toBeInTheDocument();
211
212
  });
212
213
 
214
+ it('passes blur done behavior to inline dropdown toolbar close', async () => {
215
+ const onChange = jest.fn();
216
+ const onDone = jest.fn();
217
+ const html = '<p>from inline dropdown close</p>';
218
+
219
+ render(
220
+ <EditableHtml
221
+ {...defaultProps}
222
+ markup="<p>Hello World</p>"
223
+ onChange={onChange}
224
+ onDone={onDone}
225
+ toolbarOpts={{ doneOn: 'blur' }}
226
+ responseAreaProps={{ type: 'inline-dropdown' }}
227
+ />,
228
+ );
229
+
230
+ await waitFor(() => {
231
+ expect(InlineDropdownNode.configure).toHaveBeenCalled();
232
+ });
233
+
234
+ const configureCall = InlineDropdownNode.configure.mock.calls[InlineDropdownNode.configure.mock.calls.length - 1];
235
+ const inlineDropdownOptions = configureCall[0];
236
+ const editor = {
237
+ getHTML: jest.fn(() => html),
238
+ };
239
+
240
+ inlineDropdownOptions.onInlineDropdownToolbarClose(editor);
241
+
242
+ expect(editor.getHTML).toHaveBeenCalledTimes(1);
243
+ expect(onChange).toHaveBeenCalledWith(html);
244
+ expect(onDone).toHaveBeenCalledWith(html);
245
+ });
246
+
213
247
  it('accepts size props', () => {
214
248
  const sizeProps = {
215
249
  width: 500,
@@ -120,6 +120,30 @@ export const EditableHtml = (props) => {
120
120
  ...toolbarOpts,
121
121
  };
122
122
 
123
+ const commitEditorContent = useCallback(
124
+ (editor) => {
125
+ const html = editor.getHTML();
126
+
127
+ if (props.markup !== html) {
128
+ props.onChange?.(html);
129
+ }
130
+
131
+ if (toolbarOptsToUse.doneOn === 'blur') {
132
+ props.onDone?.(html);
133
+ }
134
+ },
135
+ [props.markup, props.onChange, props.onDone, toolbarOptsToUse.doneOn],
136
+ );
137
+
138
+ const responseAreaPropsToUse = useMemo(
139
+ () => ({
140
+ ...defaultResponseAreaProps,
141
+ ...props.responseAreaProps,
142
+ onInlineDropdownToolbarClose: commitEditorContent,
143
+ }),
144
+ [props.responseAreaProps, commitEditorContent],
145
+ );
146
+
123
147
  const activePluginsToUse = useMemo(() => {
124
148
  let { customPlugins, ...otherPluginProps } = props.pluginProps || {};
125
149
 
@@ -143,14 +167,14 @@ export const EditableHtml = (props) => {
143
167
  toolbar: {},
144
168
  table: {},
145
169
  responseArea: {
146
- type: props.responseAreaProps?.type,
170
+ type: responseAreaPropsToUse.type,
147
171
  },
148
172
  languageCharacters: props.languageCharactersProps,
149
173
  keyPadCharacterRef: {},
150
174
  setKeypadInteraction: {},
151
175
  media: {},
152
176
  });
153
- }, [props]);
177
+ }, [props, responseAreaPropsToUse.type]);
154
178
 
155
179
  const extensions = [
156
180
  TextAlign.configure({
@@ -183,11 +207,11 @@ export const EditableHtml = (props) => {
183
207
  TableRow,
184
208
  ExtendedTableHeader,
185
209
  ExtendedTableCell,
186
- ResponseAreaExtension.configure(props.responseAreaProps),
187
- ExplicitConstructedResponseNode.configure(props.responseAreaProps),
188
- DragInTheBlankNode.configure(props.responseAreaProps),
189
- InlineDropdownNode.configure(props.responseAreaProps),
190
- MathTemplatedNode.configure(props.responseAreaProps),
210
+ ResponseAreaExtension.configure(responseAreaPropsToUse),
211
+ ExplicitConstructedResponseNode.configure(responseAreaPropsToUse),
212
+ DragInTheBlankNode.configure(responseAreaPropsToUse),
213
+ InlineDropdownNode.configure(responseAreaPropsToUse),
214
+ MathTemplatedNode.configure(responseAreaPropsToUse),
191
215
  MathNode.configure({
192
216
  toolbarOpts: toolbarOptsToUse,
193
217
  math: props.pluginProps?.math || {},
@@ -303,15 +327,7 @@ export const EditableHtml = (props) => {
303
327
  return;
304
328
  }
305
329
 
306
- const html = editor.getHTML();
307
-
308
- if (props.markup !== html) {
309
- props.onChange?.(html);
310
- }
311
-
312
- if (toolbarOptsToUse.doneOn === 'blur') {
313
- props.onDone?.(html);
314
- }
330
+ commitEditorContent(editor);
315
331
  },
316
332
  },
317
333
  [props.charactersLimit],
@@ -1,7 +1,12 @@
1
1
  import React from 'react';
2
2
  import { fireEvent, render, waitFor } from '@testing-library/react';
3
+ import { renderMath } from '@pie-lib/math-rendering';
3
4
  import InlineDropdown from '../respArea/InlineDropdown';
4
5
 
6
+ jest.mock('@pie-lib/math-rendering', () => ({
7
+ renderMath: jest.fn(),
8
+ }));
9
+
5
10
  jest.mock('@tiptap/react', () => ({
6
11
  NodeViewWrapper: ({ children, ...props }) => (
7
12
  <div data-testid="node-view-wrapper" {...props}>
@@ -104,6 +109,32 @@ describe('InlineDropdown', () => {
104
109
  expect(valueDiv).toBeInTheDocument();
105
110
  });
106
111
 
112
+ it('renders math inside the value control on mount', () => {
113
+ const { container } = render(<InlineDropdown {...defaultProps} />);
114
+ const valueDiv = container.querySelector('div[style*="border"]');
115
+
116
+ expect(renderMath).toHaveBeenCalledWith(valueDiv);
117
+ });
118
+
119
+ it('re-renders math when the value changes', () => {
120
+ const updatedNode = {
121
+ ...mockNode,
122
+ attrs: {
123
+ ...mockNode.attrs,
124
+ value: '<span>Updated math</span>',
125
+ },
126
+ };
127
+
128
+ const { container, rerender } = render(<InlineDropdown {...defaultProps} />);
129
+
130
+ renderMath.mockClear();
131
+
132
+ rerender(<InlineDropdown {...defaultProps} node={updatedNode} />);
133
+
134
+ const valueDiv = container.querySelector('div[style*="border"]');
135
+ expect(renderMath).toHaveBeenCalledWith(valueDiv);
136
+ });
137
+
107
138
  it('uses 2px horizontal margin on the value control and no horizontal margin on the wrapper', () => {
108
139
  const { container, getByTestId } = render(<InlineDropdown {...defaultProps} />);
109
140
  const valueDiv = container.querySelector('div[style*="border"]');
@@ -185,6 +216,28 @@ describe('InlineDropdown', () => {
185
216
  });
186
217
  });
187
218
 
219
+ it('calls close callback when toolbar closes on outside click', async () => {
220
+ const onInlineDropdownToolbarClose = jest.fn();
221
+ const options = {
222
+ ...mockOptions,
223
+ onInlineDropdownToolbarClose,
224
+ };
225
+
226
+ const { queryByTestId } = render(<InlineDropdown {...defaultProps} options={options} selected={true} />);
227
+
228
+ await waitFor(() => {
229
+ expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
230
+ });
231
+
232
+ fireEvent.mouseDown(document.body);
233
+
234
+ await waitFor(() => {
235
+ expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
236
+ });
237
+
238
+ expect(onInlineDropdownToolbarClose).toHaveBeenCalledWith(mockEditor);
239
+ });
240
+
188
241
  it('uses the current node when closing on outside click after the node prop changes', async () => {
189
242
  const onToolbarCloseRequest = jest.fn((_tuple, _editor, onConfirm) => onConfirm());
190
243
  const options = {
@@ -476,7 +529,7 @@ describe('InlineDropdown', () => {
476
529
  await waitFor(() => {
477
530
  expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
478
531
  });
479
- });
532
+ });
480
533
 
481
534
  it('renders delete control on portaled custom toolbar when container el is set', async () => {
482
535
  const { findByLabelText } = render(<InlineDropdown {...defaultProps} selected />);
@@ -1,9 +1,10 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
+ import ReactDOM from 'react-dom';
3
+ import { renderMath } from '@pie-lib/math-rendering';
2
4
  import PropTypes from 'prop-types';
3
5
  import { NodeViewWrapper } from '@tiptap/react';
4
6
  import { NodeSelection } from 'prosemirror-state';
5
7
  import { Chevron } from '../icons/RespArea';
6
- import ReactDOM from 'react-dom';
7
8
  import CustomToolbarWrapper from '../../extensions/custom-toolbar-wrapper';
8
9
  import { setToolbarOpened } from '../../utils/toolbar';
9
10
 
@@ -16,6 +17,7 @@ const InlineDropdown = (props) => {
16
17
  const toolbarRef = useRef(null);
17
18
  const toolbarEditor = useRef(null);
18
19
  const pendingCloseRequest = useRef(false);
20
+ const elementRef = useRef(null);
19
21
 
20
22
  const isHeld = () =>
21
23
  editor._holdInlineDropdownToolbarIndex != null &&
@@ -30,6 +32,7 @@ const InlineDropdown = (props) => {
30
32
  }
31
33
 
32
34
  setShowToolbar(false);
35
+ options.onInlineDropdownToolbarClose?.(editor);
33
36
  };
34
37
 
35
38
  const InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, closeToolbar);
@@ -93,13 +96,16 @@ const InlineDropdown = (props) => {
93
96
  }
94
97
  }, [editor, node, selected]);
95
98
 
96
-
97
-
98
99
  const isScrollbarClicked = (event) =>
99
100
  event.clientX > document.documentElement.clientWidth ||
100
101
  event.clientY > document.documentElement.clientHeight ||
101
102
  event.target === document.documentElement;
102
-
103
+
104
+ useEffect(() => {
105
+ if (elementRef.current && typeof renderMath === 'function') {
106
+ renderMath(elementRef.current);
107
+ }
108
+ }, [value]);
103
109
 
104
110
  useEffect(() => {
105
111
  // Calculate position relative to selection
@@ -113,10 +119,10 @@ const InlineDropdown = (props) => {
113
119
  });
114
120
 
115
121
  const handleClickOutside = (event) => {
116
-
117
- if( isScrollbarClicked(event) ) {
122
+ if (isScrollbarClicked(event)) {
118
123
  return;
119
124
  }
125
+
120
126
  const insideSomeEditor = event.target.closest('[data-toolbar-for]');
121
127
 
122
128
  if (
@@ -151,6 +157,7 @@ const InlineDropdown = (props) => {
151
157
  }}
152
158
  >
153
159
  <div
160
+ ref={elementRef}
154
161
  style={{
155
162
  display: 'inline-flex',
156
163
  minWidth: '178px',
@@ -416,6 +416,7 @@ describe('MathNodeView', () => {
416
416
  attrs: {
417
417
  latex: 'x^2',
418
418
  },
419
+ nodeSize: 1,
419
420
  };
420
421
 
421
422
  let defaultProps;
@@ -429,6 +430,7 @@ describe('MathNodeView', () => {
429
430
  editor: createMockEditor(),
430
431
  selected: false,
431
432
  options: {},
433
+ getPos: jest.fn(() => 0),
432
434
  };
433
435
  });
434
436
 
@@ -201,7 +201,7 @@ export const MathNode = Node.create({
201
201
  });
202
202
 
203
203
  export const MathNodeView = (props) => {
204
- const { node, updateAttributes, editor, selected, options } = props;
204
+ const { node, updateAttributes, editor, selected, options, getPos } = props;
205
205
  const [showToolbar, setShowToolbar] = useState(selected);
206
206
  const toolbarRef = useRef(null);
207
207
  const nodeRef = useRef(null);
@@ -222,16 +222,29 @@ export const MathNodeView = (props) => {
222
222
  updateAttributes({ latex: newLatex });
223
223
  };
224
224
 
225
- const handleDone = (newLatex) => {
225
+ // moveCursorAfterNode is set explicitly by the caller (not inferred from
226
+ // editor.state.selection: every keystroke while editing already calls
227
+ // updateAttributes, which replaces this node's content and — per a
228
+ // ProseMirror mapping quirk — collapses any NodeSelection on it into a
229
+ // plain TextSelection right away, so the live selection can't be trusted
230
+ // to still describe this node by the time handleDone runs).
231
+ //
232
+ // - Check icon: always move the cursor to just after this node.
233
+ // - Clicking elsewhere in the editable content while the toolbar was
234
+ // open (see handleClickOutside): leave the cursor where the user
235
+ // actually clicked instead of overriding it.
236
+ const handleDone = (newLatex, { moveCursorAfterNode = true } = {}) => {
226
237
  updateAttributes({ latex: newLatex });
227
238
  setShowToolbar(false);
228
239
 
229
- const { selection, tr, doc } = editor.state;
230
- const sel = TextSelection.create(doc, selection.from + 1);
240
+ if (moveCursorAfterNode && typeof getPos === 'function') {
241
+ const pos = getPos();
242
+ const { doc } = editor.state;
243
+ const sel = TextSelection.create(doc, pos + node.nodeSize);
244
+ const tr = editor.state.tr.setSelection(sel);
245
+ editor.view.dispatch(tr);
246
+ }
231
247
 
232
- // Build a fresh transaction from the current state and set the selection
233
- tr.setSelection(sel);
234
- editor.view.dispatch(tr);
235
248
  editor.commands.focus();
236
249
  };
237
250
 
@@ -362,7 +375,16 @@ export const MathNodeView = (props) => {
362
375
  !clickedMathNode
363
376
  ) {
364
377
  setShowToolbar(false);
365
- handleDone(node.attrs.latex);
378
+
379
+ // If the click landed inside the editable content itself, respect
380
+ // it and leave the cursor where the user clicked. If it landed
381
+ // fully outside the editor (e.g. on other page UI), there's no
382
+ // click position to preserve — falling back to "leave selection
383
+ // untouched" there renders the browser's native NodeSelection
384
+ // fallback caret at the start of the node, so explicitly move the
385
+ // cursor after it instead, same as the check-icon path.
386
+ const clickedInsideEditableContent = !!editor?.view?.dom?.contains(target);
387
+ handleDone(node.attrs.latex, { moveCursorAfterNode: !clickedInsideEditableContent });
366
388
  }
367
389
  };
368
390