@pie-lib/editable-html-tip-tap 1.2.0-next.21 → 1.2.0-next.23

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.
@@ -32,6 +32,42 @@ var DivNode = exports.DivNode = _core.Node.create({
32
32
  return _this.editor.chain().focus().setNode('paragraph') // current div becomes <p>
33
33
  .splitBlock() // create another <p>
34
34
  .run();
35
+ },
36
+ // When the cursor is in a div and the user presses Backspace,
37
+ // ProseMirror's default handler may try to join/delete the block node
38
+ // once it becomes empty. That triggers the Enter shortcut above
39
+ // (div → p conversion + split), making it look like a new line is
40
+ // inserted instead of deleting.
41
+ // We handle two cases explicitly:
42
+ // 1. The div already IS empty → swallow the event (nothing to delete).
43
+ // 2. The div has exactly ONE character left → delete just that character
44
+ // using a precise transaction, then stop. This prevents ProseMirror
45
+ // from following up with a block-join that triggers the Enter handler.
46
+ Backspace: function Backspace() {
47
+ var state = _this.editor.state;
48
+ var _state$selection = state.selection,
49
+ $from = _state$selection.$from,
50
+ selectionEmpty = _state$selection.empty;
51
+ if ($from.parent.type.name !== 'div') {
52
+ return false;
53
+ }
54
+ if (!selectionEmpty) {
55
+ return false;
56
+ }
57
+ var parentText = $from.parent.textContent;
58
+ if (parentText.length === 0) {
59
+ return state.doc.childCount === 1 ? true : false;
60
+ }
61
+
62
+ // one character left and cursor is after it — delete
63
+ // only that character and stop, preventing the block-join that fires Enter.
64
+ if (parentText.length === 1 && $from.parentOffset === 1) {
65
+ var tr = state.tr;
66
+ tr["delete"]($from.pos - 1, $from.pos);
67
+ _this.editor.view.dispatch(tr);
68
+ return true;
69
+ }
70
+ return false;
35
71
  }
36
72
  };
37
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"div-node.js","names":["_core","require","DivNode","exports","Node","create","name","group","content","parseHTML","tag","renderHTML","_ref","HTMLAttributes","addKeyboardShortcuts","_this","Enter","state","editor","$from","selection","parent","type","chain","focus","setNode","splitBlock","run"],"sources":["../../src/extensions/div-node.js"],"sourcesContent":["// DivNode.ts\nimport { Node } from '@tiptap/core';\n\nexport const DivNode = Node.create({\n name: 'div',\n group: 'block',\n content: 'inline*',\n\n parseHTML() {\n return [{ tag: 'div' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => {\n const { state } = this.editor;\n const { $from } = state.selection;\n\n if ($from.parent.type.name !== 'div') {\n return false;\n }\n\n return this.editor\n .chain()\n .focus()\n .setNode('paragraph') // current div becomes <p>\n .splitBlock() // create another <p>\n .run();\n },\n };\n },\n});\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AADA;;AAGO,IAAMC,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAGE,UAAI,CAACC,MAAM,CAAC;EACjCC,IAAI,EAAE,KAAK;EACXC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE,SAAS;EAElBC,SAAS,WAATA,SAASA,CAAA,EAAG;IACV,OAAO,CAAC;MAAEC,GAAG,EAAE;IAAM,CAAC,CAAC;EACzB,CAAC;EAEDC,UAAU,WAAVA,UAAUA,CAAAC,IAAA,EAAqB;IAAA,IAAlBC,cAAc,GAAAD,IAAA,CAAdC,cAAc;IACzB,OAAO,CAAC,KAAK,EAAEA,cAAc,EAAE,CAAC,CAAC;EACnC,CAAC;EAEDC,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;IAAA,IAAAC,KAAA;IACrB,OAAO;MACLC,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAQ;QACX,IAAQC,KAAK,GAAKF,KAAI,CAACG,MAAM,CAArBD,KAAK;QACb,IAAQE,KAAK,GAAKF,KAAK,CAACG,SAAS,CAAzBD,KAAK;QAEb,IAAIA,KAAK,CAACE,MAAM,CAACC,IAAI,CAAChB,IAAI,KAAK,KAAK,EAAE;UACpC,OAAO,KAAK;QACd;QAEA,OAAOS,KAAI,CAACG,MAAM,CACfK,KAAK,CAAC,CAAC,CACPC,KAAK,CAAC,CAAC,CACPC,OAAO,CAAC,WAAW,CAAC,CAAC;QAAA,CACrBC,UAAU,CAAC,CAAC,CAAC;QAAA,CACbC,GAAG,CAAC,CAAC;MACV;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"div-node.js","names":["_core","require","DivNode","exports","Node","create","name","group","content","parseHTML","tag","renderHTML","_ref","HTMLAttributes","addKeyboardShortcuts","_this","Enter","state","editor","$from","selection","parent","type","chain","focus","setNode","splitBlock","run","Backspace","_state$selection","selectionEmpty","empty","parentText","textContent","length","doc","childCount","parentOffset","tr","pos","view","dispatch"],"sources":["../../src/extensions/div-node.js"],"sourcesContent":["// DivNode.ts\nimport { Node } from '@tiptap/core';\n\nexport const DivNode = Node.create({\n name: 'div',\n group: 'block',\n content: 'inline*',\n\n parseHTML() {\n return [{ tag: 'div' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['div', HTMLAttributes, 0];\n },\n\n addKeyboardShortcuts() {\n return {\n Enter: () => {\n const { state } = this.editor;\n const { $from } = state.selection;\n\n if ($from.parent.type.name !== 'div') {\n return false;\n }\n\n return this.editor\n .chain()\n .focus()\n .setNode('paragraph') // current div becomes <p>\n .splitBlock() // create another <p>\n .run();\n },\n\n // When the cursor is in a div and the user presses Backspace,\n // ProseMirror's default handler may try to join/delete the block node\n // once it becomes empty. That triggers the Enter shortcut above\n // (div → p conversion + split), making it look like a new line is\n // inserted instead of deleting.\n // We handle two cases explicitly:\n // 1. The div already IS empty → swallow the event (nothing to delete).\n // 2. The div has exactly ONE character left → delete just that character\n // using a precise transaction, then stop. This prevents ProseMirror\n // from following up with a block-join that triggers the Enter handler.\n Backspace: () => {\n const { state } = this.editor;\n const { $from, empty: selectionEmpty } = state.selection;\n\n if ($from.parent.type.name !== 'div') {\n return false;\n }\n\n if (!selectionEmpty) {\n return false;\n }\n\n const parentText = $from.parent.textContent;\n\n if (parentText.length === 0) {\n return state.doc.childCount === 1 ? true : false;\n }\n\n // one character left and cursor is after it — delete\n // only that character and stop, preventing the block-join that fires Enter.\n if (parentText.length === 1 && $from.parentOffset === 1) {\n const { tr } = state;\n tr.delete($from.pos - 1, $from.pos);\n this.editor.view.dispatch(tr);\n return true;\n }\n\n return false;\n },\n };\n },\n});\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AADA;;AAGO,IAAMC,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAGE,UAAI,CAACC,MAAM,CAAC;EACjCC,IAAI,EAAE,KAAK;EACXC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE,SAAS;EAElBC,SAAS,WAATA,SAASA,CAAA,EAAG;IACV,OAAO,CAAC;MAAEC,GAAG,EAAE;IAAM,CAAC,CAAC;EACzB,CAAC;EAEDC,UAAU,WAAVA,UAAUA,CAAAC,IAAA,EAAqB;IAAA,IAAlBC,cAAc,GAAAD,IAAA,CAAdC,cAAc;IACzB,OAAO,CAAC,KAAK,EAAEA,cAAc,EAAE,CAAC,CAAC;EACnC,CAAC;EAEDC,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;IAAA,IAAAC,KAAA;IACrB,OAAO;MACLC,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAQ;QACX,IAAQC,KAAK,GAAKF,KAAI,CAACG,MAAM,CAArBD,KAAK;QACb,IAAQE,KAAK,GAAKF,KAAK,CAACG,SAAS,CAAzBD,KAAK;QAEb,IAAIA,KAAK,CAACE,MAAM,CAACC,IAAI,CAAChB,IAAI,KAAK,KAAK,EAAE;UACpC,OAAO,KAAK;QACd;QAEA,OAAOS,KAAI,CAACG,MAAM,CACfK,KAAK,CAAC,CAAC,CACPC,KAAK,CAAC,CAAC,CACPC,OAAO,CAAC,WAAW,CAAC,CAAC;QAAA,CACrBC,UAAU,CAAC,CAAC,CAAC;QAAA,CACbC,GAAG,CAAC,CAAC;MACV,CAAC;MAED;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACAC,SAAS,EAAE,SAAXA,SAASA,CAAA,EAAQ;QACf,IAAQX,KAAK,GAAKF,KAAI,CAACG,MAAM,CAArBD,KAAK;QACb,IAAAY,gBAAA,GAAyCZ,KAAK,CAACG,SAAS;UAAhDD,KAAK,GAAAU,gBAAA,CAALV,KAAK;UAASW,cAAc,GAAAD,gBAAA,CAArBE,KAAK;QAEpB,IAAIZ,KAAK,CAACE,MAAM,CAACC,IAAI,CAAChB,IAAI,KAAK,KAAK,EAAE;UACpC,OAAO,KAAK;QACd;QAEA,IAAI,CAACwB,cAAc,EAAE;UACnB,OAAO,KAAK;QACd;QAEA,IAAME,UAAU,GAAGb,KAAK,CAACE,MAAM,CAACY,WAAW;QAE3C,IAAID,UAAU,CAACE,MAAM,KAAK,CAAC,EAAE;UAC3B,OAAOjB,KAAK,CAACkB,GAAG,CAACC,UAAU,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;QAClD;;QAEA;QACA;QACA,IAAIJ,UAAU,CAACE,MAAM,KAAK,CAAC,IAAIf,KAAK,CAACkB,YAAY,KAAK,CAAC,EAAE;UACvD,IAAQC,EAAE,GAAKrB,KAAK,CAAZqB,EAAE;UACVA,EAAE,UAAO,CAACnB,KAAK,CAACoB,GAAG,GAAG,CAAC,EAAEpB,KAAK,CAACoB,GAAG,CAAC;UACnCxB,KAAI,CAACG,MAAM,CAACsB,IAAI,CAACC,QAAQ,CAACH,EAAE,CAAC;UAC7B,OAAO,IAAI;QACb;QAEA,OAAO,KAAK;MACd;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -19,6 +19,17 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  var ensureTextAfterMathPluginKey = new _prosemirrorState.PluginKey('ensureTextAfterMath');
22
+ var generateAdditionalKeys = function generateAdditionalKeys() {
23
+ var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
24
+ return keyData.map(function (key) {
25
+ return {
26
+ name: key,
27
+ latex: key,
28
+ write: key,
29
+ label: key
30
+ };
31
+ });
32
+ };
22
33
  var EnsureTextAfterMathPlugin = exports.EnsureTextAfterMathPlugin = function EnsureTextAfterMathPlugin(mathNodeName) {
23
34
  return new _prosemirrorState.Plugin({
24
35
  key: ensureTextAfterMathPluginKey,
@@ -208,6 +219,16 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
208
219
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
209
220
  position = _useState4[0],
210
221
  setPosition = _useState4[1];
222
+ var _ref3 = options || {},
223
+ _ref3$math = _ref3.math,
224
+ mathOptions = _ref3$math === void 0 ? {} : _ref3$math;
225
+ var keypadMode = mathOptions.keypadMode,
226
+ _mathOptions$controll = mathOptions.controlledKeypadMode,
227
+ controlledKeypadMode = _mathOptions$controll === void 0 ? true : _mathOptions$controll,
228
+ _mathOptions$customKe = mathOptions.customKeys,
229
+ customKeys = _mathOptions$customKe === void 0 ? [] : _mathOptions$customKe,
230
+ keyPadCharacterRef = mathOptions.keyPadCharacterRef,
231
+ setKeypadInteraction = mathOptions.setKeypadInteraction;
211
232
  var latex = node.attrs.latex || '';
212
233
  (0, _react.useEffect)(function () {
213
234
  if (selected) {
@@ -228,7 +249,15 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
228
249
  left: start.left
229
250
  });
230
251
  var handleClickOutside = function handleClickOutside(event) {
231
- if (toolbarRef.current && !toolbarRef.current.contains(event.target) && !event.target.closest('[data-inline-node]')) {
252
+ var _document$querySelect, _document, _target$closest, _target$closest2;
253
+ var target = event === null || event === void 0 ? void 0 : event.target;
254
+
255
+ // MUI's `Select` renders its dropdown options in a portal attached to `document.body`.
256
+ // Those clicks should not dismiss the math toolbar.
257
+ var equationEditorListboxes = ((_document$querySelect = (_document = document).querySelectorAll) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.call(_document, '[id^="equation-editor-select"][id*="listbox"], [aria-labelledby="equation-editor-label"][role="listbox"]')) || [];
258
+ var equationEditorPopoverOpen = equationEditorListboxes.length > 0;
259
+ var clickedEquationEditorSelect = !!(target !== null && target !== void 0 && target.id && target.id.includes('equation-editor-select')) || !!(target !== null && target !== void 0 && (_target$closest = target.closest) !== null && _target$closest !== void 0 && _target$closest.call(target, '[id*="equation-editor-select"]'));
260
+ if (toolbarRef.current && !toolbarRef.current.contains(target) && !(target !== null && target !== void 0 && (_target$closest2 = target.closest) !== null && _target$closest2 !== void 0 && _target$closest2.call(target, '[data-inline-node]')) && !equationEditorPopoverOpen && !clickedEquationEditorSelect) {
232
261
  setShowToolbar(false);
233
262
  }
234
263
  };
@@ -296,7 +325,11 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
296
325
  autoFocus: true,
297
326
  onChange: handleChange,
298
327
  onDone: handleDone,
299
- keypadMode: "basic"
328
+ keypadMode: keypadMode,
329
+ controlledKeypadMode: controlledKeypadMode,
330
+ additionalKeys: generateAdditionalKeys(customKeys),
331
+ keyPadCharacterRef: keyPadCharacterRef,
332
+ setKeypadInteraction: setKeypadInteraction
300
333
  })), document.body));
301
334
  };
302
335
  //# sourceMappingURL=math.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_prosemirrorState","_mathToolbar","_mathRendering","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","EnsureTextAfterMathPlugin","exports","mathNodeName","Plugin","key","appendTransaction","transactions","oldState","newState","some","tr","docChanged","changed","doc","descendants","node","pos","type","name","nextPos","nodeSize","nextNode","nodeAt","insert","schema","text","ZeroWidthSpaceHandlingPlugin","props","handleKeyDown","view","event","state","dispatch","selection","from","empty","prevChar","textBetween","posBefore","resolved","resolve","maybeNode","nodeAfter","nodeBefore","nodePos","nodeResolved","setSelection","NodeSelection","create","TextSelection","MathNode","Node","group","inline","atom","addAttributes","latex","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","textContent","innerHTML","addCommands","_this","insertMath","undefined","_ref","_node$type","editor","nodes","math","$from","sel","renderHTML","_ref2","HTMLAttributes","dangerouslySetInnerHTML","__html","wrapMath","addNodeView","_this2","ReactNodeViewRenderer","createElement","MathNodeView","options","updateAttributes","selected","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","toolbarRef","useRef","_useState3","top","left","_useState4","position","setPosition","attrs","useEffect","_toolbarOpened","bodyRect","document","body","getBoundingClientRect","start","coordsAtPos","Math","abs","handleClickOutside","current","contains","target","closest","addEventListener","removeEventListener","handleChange","newLatex","handleDone","_editor$state","commands","focus","NodeViewWrapper","className","style","display","cursor","margin","onClick","contentEditable","MathPreview","ReactDOM","createPortal","ref","instanceId","concat","zIndex","background","boxShadow","MathToolbar","autoFocus","onChange","onDone","keypadMode"],"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';\n\nconst ensureTextAfterMathPluginKey = new PluginKey('ensureTextAfterMath');\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)) return null;\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\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 prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n if (prevChar === '\\u200b') {\n const tr = state.tr.delete(from - 2, from);\n dispatch(tr);\n return true; // handled\n }\n }\n\n if (empty && event.key === 'ArrowLeft' && from > 0) {\n const prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n // If the previous character is the zero-width space...\n if (prevChar === '\\u200b') {\n const posBefore = from - 1;\n const resolved = state.doc.resolve(posBefore - 1); // look just before the zwsp\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 nodePos = posBefore - maybeNode.nodeSize;\n const nodeResolved = state.doc.resolve(nodePos);\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\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 return true;\n },\n // insertMath: (latex = '') => ({ commands }) => {\n // return commands.insertContent({\n // type: this.name,\n // attrs: { latex },\n // });\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 [position, setPosition] = useState({ top: 0, left: 0 });\n\n const latex = node.attrs.latex || '';\n\n useEffect(() => {\n if (selected) {\n setShowToolbar(true);\n }\n }, [selected]);\n\n useEffect(() => {\n editor._toolbarOpened = !!showToolbar;\n }, [showToolbar]);\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 setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n if (\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n setShowToolbar(false);\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]);\n\n const handleChange = (newLatex) => {\n updateAttributes({ latex: newLatex });\n };\n\n const handleDone = (newLatex) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n\n editor._toolbarOpened = 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 return (\n <NodeViewWrapper\n className=\"math-node\"\n style={{\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n }}\n data-selected={selected}\n >\n <div 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: 20,\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 latex={latex} autoFocus onChange={handleChange} onDone={handleDone} keypadMode=\"basic\" />\n </div>,\n 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","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","ZeroWidthSpaceHandlingPlugin","props","handleKeyDown","view","event","state","dispatch","selection","from","empty","prevChar","textBetween","posBefore","resolved","resolve","maybeNode","nodeAfter","nodeBefore","nodePos","nodeResolved","setSelection","NodeSelection","create","TextSelection","MathNode","Node","group","inline","atom","addAttributes","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","textContent","innerHTML","addCommands","_this","insertMath","_ref","_node$type","editor","nodes","math","$from","sel","renderHTML","_ref2","HTMLAttributes","dangerouslySetInnerHTML","__html","wrapMath","addNodeView","_this2","ReactNodeViewRenderer","createElement","MathNodeView","options","updateAttributes","selected","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","toolbarRef","useRef","_useState3","top","left","_useState4","position","setPosition","_ref3","_ref3$math","mathOptions","keypadMode","_mathOptions$controll","controlledKeypadMode","_mathOptions$customKe","customKeys","keyPadCharacterRef","setKeypadInteraction","attrs","useEffect","_toolbarOpened","bodyRect","document","body","getBoundingClientRect","start","coordsAtPos","Math","abs","handleClickOutside","_document$querySelect","_document","_target$closest","_target$closest2","target","equationEditorListboxes","querySelectorAll","equationEditorPopoverOpen","clickedEquationEditorSelect","id","includes","closest","current","contains","addEventListener","removeEventListener","handleChange","newLatex","handleDone","_editor$state","commands","focus","NodeViewWrapper","className","style","display","cursor","margin","onClick","contentEditable","MathPreview","ReactDOM","createPortal","ref","instanceId","concat","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';\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)) return null;\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\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 prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n if (prevChar === '\\u200b') {\n const tr = state.tr.delete(from - 2, from);\n dispatch(tr);\n return true; // handled\n }\n }\n\n if (empty && event.key === 'ArrowLeft' && from > 0) {\n const prevChar = doc.textBetween(from - 1, from, '\\uFFFC', '\\uFFFC');\n // If the previous character is the zero-width space...\n if (prevChar === '\\u200b') {\n const posBefore = from - 1;\n const resolved = state.doc.resolve(posBefore - 1); // look just before the zwsp\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 nodePos = posBefore - maybeNode.nodeSize;\n const nodeResolved = state.doc.resolve(nodePos);\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\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 return true;\n },\n // insertMath: (latex = '') => ({ commands }) => {\n // return commands.insertContent({\n // type: this.name,\n // attrs: { latex },\n // });\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 [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 useEffect(() => {\n if (selected) {\n setShowToolbar(true);\n }\n }, [selected]);\n\n useEffect(() => {\n editor._toolbarOpened = !!showToolbar;\n }, [showToolbar]);\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 setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\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 (\n toolbarRef.current &&\n !toolbarRef.current.contains(target) &&\n !target?.closest?.('[data-inline-node]') &&\n !equationEditorPopoverOpen &&\n !clickedEquationEditorSelect\n ) {\n setShowToolbar(false);\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]);\n\n const handleChange = (newLatex) => {\n updateAttributes({ latex: newLatex });\n };\n\n const handleDone = (newLatex) => {\n updateAttributes({ latex: newLatex });\n setShowToolbar(false);\n\n editor._toolbarOpened = 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 return (\n <NodeViewWrapper\n className=\"math-node\"\n style={{\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n }}\n data-selected={selected}\n >\n <div 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: 20,\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 document.body,\n )}\n </NodeViewWrapper>\n );\n};\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAP,OAAA;AAAmD,SAAAD,wBAAAS,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,wBAAAS,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,QAAApB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAgB,MAAA,CAAAI,IAAA,CAAArB,CAAA,OAAAiB,MAAA,CAAAK,qBAAA,QAAAhB,CAAA,GAAAW,MAAA,CAAAK,qBAAA,CAAAtB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAiB,MAAA,WAAApB,CAAA,WAAAc,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAAqB,UAAA,OAAAvB,CAAA,CAAAwB,IAAA,CAAAC,KAAA,CAAAzB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAA0B,cAAA3B,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAyB,SAAA,CAAAC,MAAA,EAAA1B,CAAA,UAAAF,CAAA,WAAA2B,SAAA,CAAAzB,CAAA,IAAAyB,SAAA,CAAAzB,CAAA,QAAAA,CAAA,OAAAiB,OAAA,CAAAH,MAAA,CAAAhB,CAAA,OAAA6B,OAAA,WAAA3B,CAAA,QAAA4B,gBAAA,aAAA/B,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAc,MAAA,CAAAe,yBAAA,GAAAf,MAAA,CAAAgB,gBAAA,CAAAjC,CAAA,EAAAiB,MAAA,CAAAe,yBAAA,CAAA/B,CAAA,KAAAmB,OAAA,CAAAH,MAAA,CAAAhB,CAAA,GAAA6B,OAAA,WAAA3B,CAAA,IAAAc,MAAA,CAAAC,cAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAc,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAEnD,IAAMkC,4BAA4B,GAAG,IAAIC,2BAAS,CAAC,qBAAqB,CAAC;AAEzE,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAA,EAAqB;EAAA,IAAjBC,OAAO,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,EAAE;EAC1C,OAAOS,OAAO,CAACE,GAAG,CAAC,UAACC,GAAG;IAAA,OAAM;MAC3BC,IAAI,EAAED,GAAG;MACTE,KAAK,EAAEF,GAAG;MACVG,KAAK,EAAEH,GAAG;MACVI,KAAK,EAAEJ;IACT,CAAC;EAAA,CAAC,CAAC;AACL,CAAC;AAEM,IAAMK,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,SAA5BA,yBAAyBA,CAAIE,YAAY;EAAA,OACpD,IAAIC,wBAAM,CAAC;IACTR,GAAG,EAAEN,4BAA4B;IACjCe,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,YAAY,EAAEC,QAAQ,EAAEC,QAAQ,EAAK;MACvD;MACA,IAAI,CAACF,YAAY,CAACG,IAAI,CAAC,UAACC,EAAE;QAAA,OAAKA,EAAE,CAACC,UAAU;MAAA,EAAC,EAAE,OAAO,IAAI;MAE1D,IAAMD,EAAE,GAAGF,QAAQ,CAACE,EAAE;MACtB,IAAIE,OAAO,GAAG,KAAK;MAEnBJ,QAAQ,CAACK,GAAG,CAACC,WAAW,CAAC,UAACC,IAAI,EAAEC,GAAG,EAAK;QACtC,IAAID,IAAI,CAACE,IAAI,CAACpB,IAAI,KAAKM,YAAY,EAAE;UACnC,IAAMe,OAAO,GAAGF,GAAG,GAAGD,IAAI,CAACI,QAAQ;UACnC,IAAMC,QAAQ,GAAGZ,QAAQ,CAACK,GAAG,CAACQ,MAAM,CAACH,OAAO,CAAC;;UAE7C;UACA,IAAI,CAACE,QAAQ,IAAIA,QAAQ,CAACH,IAAI,CAACpB,IAAI,KAAK,MAAM,EAAE;YAC9Ca,EAAE,CAACY,MAAM,CAACJ,OAAO,EAAEV,QAAQ,CAACe,MAAM,CAACC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClDZ,OAAO,GAAG,IAAI;UAChB;QACF;MACF,CAAC,CAAC;MAEF,OAAOA,OAAO,GAAGF,EAAE,GAAG,IAAI;IAC5B;EACF,CAAC,CAAC;AAAA;AAEG,IAAMe,4BAA4B,GAAAvB,OAAA,CAAAuB,4BAAA,GAAG,IAAIrB,wBAAM,CAAC;EACrDR,GAAG,EAAE,IAAIL,2BAAS,CAAC,wBAAwB,CAAC;EAC5CmC,KAAK,EAAE;IACLC,aAAa,WAAbA,aAAaA,CAACC,IAAI,EAAEC,KAAK,EAAE;MACzB,IAAQC,KAAK,GAAeF,IAAI,CAAxBE,KAAK;QAAEC,QAAQ,GAAKH,IAAI,CAAjBG,QAAQ;MACvB,IAAQC,SAAS,GAAUF,KAAK,CAAxBE,SAAS;QAAEnB,GAAG,GAAKiB,KAAK,CAAbjB,GAAG;MACtB,IAAQoB,IAAI,GAAYD,SAAS,CAAzBC,IAAI;QAAEC,KAAK,GAAKF,SAAS,CAAnBE,KAAK;MAEnB,IAAIA,KAAK,IAAIL,KAAK,CAACjC,GAAG,KAAK,WAAW,IAAIqC,IAAI,GAAG,CAAC,EAAE;QAClD,IAAME,QAAQ,GAAGtB,GAAG,CAACuB,WAAW,CAACH,IAAI,GAAG,CAAC,EAAEA,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACpE,IAAIE,QAAQ,KAAK,QAAQ,EAAE;UACzB,IAAMzB,EAAE,GAAGoB,KAAK,CAACpB,EAAE,UAAO,CAACuB,IAAI,GAAG,CAAC,EAAEA,IAAI,CAAC;UAC1CF,QAAQ,CAACrB,EAAE,CAAC;UACZ,OAAO,IAAI,CAAC,CAAC;QACf;MACF;MAEA,IAAIwB,KAAK,IAAIL,KAAK,CAACjC,GAAG,KAAK,WAAW,IAAIqC,IAAI,GAAG,CAAC,EAAE;QAClD,IAAME,SAAQ,GAAGtB,GAAG,CAACuB,WAAW,CAACH,IAAI,GAAG,CAAC,EAAEA,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACpE;QACA,IAAIE,SAAQ,KAAK,QAAQ,EAAE;UACzB,IAAME,SAAS,GAAGJ,IAAI,GAAG,CAAC;UAC1B,IAAMK,QAAQ,GAAGR,KAAK,CAACjB,GAAG,CAAC0B,OAAO,CAACF,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;UACnD,IAAMG,SAAS,GAAGF,QAAQ,CAACG,SAAS,IAAIH,QAAQ,CAACI,UAAU;;UAE3D;UACA,IAAIF,SAAS,EAAE;YACb,IAAMG,OAAO,GAAGN,SAAS,GAAGG,SAAS,CAACrB,QAAQ;YAC9C,IAAMyB,YAAY,GAAGd,KAAK,CAACjB,GAAG,CAAC0B,OAAO,CAACI,OAAO,CAAC;YAC/C,IAAMjC,GAAE,GAAGoB,KAAK,CAACpB,EAAE,CAACmC,YAAY,CAACC,+BAAa,CAACC,MAAM,CAACjB,KAAK,CAACjB,GAAG,EAAE+B,YAAY,CAAC5B,GAAG,CAAC,CAAC;YACnFe,QAAQ,CAACrB,GAAE,CAAC;YACZ,OAAO,IAAI;UACb,CAAC,MAAM;YACL;YACA,IAAMA,IAAE,GAAGoB,KAAK,CAACpB,EAAE,CAACmC,YAAY,CAACG,+BAAa,CAACD,MAAM,CAACjB,KAAK,CAACjB,GAAG,EAAEoB,IAAI,GAAG,CAAC,CAAC,CAAC;YAC3EF,QAAQ,CAACrB,IAAE,CAAC;YACZ,OAAO,IAAI;UACb;QACF;MACF;MAEA,OAAO,KAAK;IACd;EACF;AACF,CAAC,CAAC;AAEK,IAAMuC,QAAQ,GAAA/C,OAAA,CAAA+C,QAAA,GAAGC,UAAI,CAACH,MAAM,CAAC;EAClClD,IAAI,EAAE,MAAM;EACZsD,KAAK,EAAE,QAAQ;EACfC,MAAM,EAAE,IAAI;EACZC,IAAI,EAAE,IAAI;EAEVC,aAAa,WAAbA,aAAaA,CAAA,EAAG;IACd,OAAO;MACLxD,KAAK,EAAE;QAAE,WAAS;MAAG,CAAC;MACtByD,OAAO,EAAE;QAAE,WAAS;MAAK,CAAC;MAC1BC,IAAI,EAAE;QAAE,WAAS;MAAK;IACxB,CAAC;EACH,CAAC;EAEDC,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;IACtB,OAAO,CAACxD,yBAAyB,CAAC,IAAI,CAACJ,IAAI,CAAC,EAAE4B,4BAA4B,CAAC;EAC7E,CAAC;EAEDiC,SAAS,WAATA,SAASA,CAAA,EAAG;IACV,OAAO,CACL;MACEC,GAAG,EAAE,kBAAkB;MACvBC,QAAQ,EAAE,SAAVA,QAAQA,CAAGC,EAAE;QAAA,OAAM;UACjB/D,KAAK,EAAE+D,EAAE,CAACC,YAAY,CAAC,UAAU,CAAC,IAAID,EAAE,CAACE;QAC3C,CAAC;MAAA;IACH,CAAC,EACD;MACEJ,GAAG,EAAE,0BAA0B;MAC/BC,QAAQ,EAAE,SAAVA,QAAQA,CAAGC,EAAE;QAAA,OAAM;UACjBL,IAAI,EAAEK,EAAE,CAACG;QACX,CAAC;MAAA;IACH,CAAC,CACF;EACH,CAAC;EAEDC,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,KAAA;IACZ,OAAO;MACLC,UAAU,EACR,SADFA,UAAUA,CAAA;QAAA,IACPrE,KAAK,GAAAd,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,EAAE;QAAA,OACX,UAAAoF,IAAA,EAA8B;UAAA,IAAAC,UAAA;UAAA,IAA3B3D,EAAE,GAAA0D,IAAA,CAAF1D,EAAE;YAAE4D,MAAM,GAAAF,IAAA,CAANE,MAAM;YAAEvC,QAAQ,GAAAqC,IAAA,CAARrC,QAAQ;UACrB,IAAQD,KAAK,GAAKwC,MAAM,CAAC1C,IAAI,CAArBE,KAAK;UACb,IAAMf,IAAI,GAAGe,KAAK,CAACP,MAAM,CAACgD,KAAK,CAACC,IAAI,CAACzB,MAAM,CAAC;YAC1CjD,KAAK,EAALA;UACF,CAAC,CAAC;UACF,IAAQkC,SAAS,GAAKF,KAAK,CAAnBE,SAAS;;UAEjB;UACA,IAAMhB,GAAG,GAAGgB,SAAS,CAACyC,KAAK,CAACzD,GAAG;UAE/BN,EAAE,CAACY,MAAM,CAACN,GAAG,EAAED,IAAI,CAAC;UAEpB,IAAI,CAAAA,IAAI,aAAJA,IAAI,gBAAAsD,UAAA,GAAJtD,IAAI,CAAEE,IAAI,cAAAoD,UAAA,uBAAVA,UAAA,CAAYxE,IAAI,MAAKqE,KAAI,CAACrE,IAAI,EAAE;YAClC;YACA,IAAM6E,GAAG,GAAG5B,+BAAa,CAACC,MAAM,CAACrC,EAAE,CAACG,GAAG,EAAEmB,SAAS,CAACyC,KAAK,CAACzD,GAAG,CAAC;;YAE7D;YACAN,EAAE,CAACmC,YAAY,CAAC6B,GAAG,CAAC;UACtB;UAEA3C,QAAQ,CAACrB,EAAE,CAAC;UAEZ,OAAO,IAAI;QACb,CAAC;MAAA;MACH;MACA;MACA;MACA;MACA;MACA;IACF,CAAC;EACH,CAAC;EAEDiE,UAAU,WAAVA,UAAUA,CAAAC,KAAA,EAAqB;IAAA,IAAlBC,cAAc,GAAAD,KAAA,CAAdC,cAAc;IACzB,IAAIA,cAAc,CAACrB,IAAI,EAAE;MACvB,OAAO,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,QAAQ;QAAEsB,uBAAuB,EAAE;UAAEC,MAAM,EAAEF,cAAc,CAACrB;QAAK;MAAE,CAAC,CAAC;IACtG;IAEA,OAAO,CACL,MAAM,EACN;MAAE,YAAY,EAAE,EAAE;MAAE,UAAU,EAAEqB,cAAc,CAAC/E;IAAM,CAAC,EACtD,IAAAkF,uBAAQ,EAACH,cAAc,CAAC/E,KAAK,EAAE+E,cAAc,CAACtB,OAAO,CAAC,CACvD;EACH,CAAC;EAED0B,WAAW,WAAXA,WAAWA,CAAA,EAAG;IAAA,IAAAC,MAAA;IACZ,OAAO,IAAAC,6BAAqB,EAAC,UAACzD,KAAK;MAAA,oBAAKhF,MAAA,YAAA0I,aAAA,CAACC,YAAY,EAAAtG,aAAA,CAAAA,aAAA,KAAU2C,KAAK;QAAE4D,OAAO,EAAEJ,MAAI,CAACI;MAAO,EAAK,CAAC;IAAA,EAAC;EACpG;AACF,CAAC,CAAC;AAEK,IAAMD,YAAY,GAAAnF,OAAA,CAAAmF,YAAA,GAAG,SAAfA,YAAYA,CAAI3D,KAAK,EAAK;EACrC,IAAQX,IAAI,GAAkDW,KAAK,CAA3DX,IAAI;IAAEwE,gBAAgB,GAAgC7D,KAAK,CAArD6D,gBAAgB;IAAEjB,MAAM,GAAwB5C,KAAK,CAAnC4C,MAAM;IAAEkB,QAAQ,GAAc9D,KAAK,CAA3B8D,QAAQ;IAAEF,OAAO,GAAK5D,KAAK,CAAjB4D,OAAO;EACzD,IAAAG,SAAA,GAAsC,IAAAC,eAAQ,EAACF,QAAQ,CAAC;IAAAG,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAAjDI,WAAW,GAAAF,UAAA;IAAEG,cAAc,GAAAH,UAAA;EAClC,IAAMI,UAAU,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EAC/B,IAAAC,UAAA,GAAgC,IAAAP,eAAQ,EAAC;MAAEQ,GAAG,EAAE,CAAC;MAAEC,IAAI,EAAE;IAAE,CAAC,CAAC;IAAAC,UAAA,OAAAR,eAAA,aAAAK,UAAA;IAAtDI,QAAQ,GAAAD,UAAA;IAAEE,WAAW,GAAAF,UAAA;EAC5B,IAAAG,KAAA,GAAmCjB,OAAO,IAAI,CAAC,CAAC;IAAAkB,UAAA,GAAAD,KAAA,CAAxC/B,IAAI;IAAEiC,WAAW,GAAAD,UAAA,cAAG,CAAC,CAAC,GAAAA,UAAA;EAC9B,IACEE,UAAU,GAKRD,WAAW,CALbC,UAAU;IAAAC,qBAAA,GAKRF,WAAW,CAJbG,oBAAoB;IAApBA,oBAAoB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IAAAE,qBAAA,GAIzBJ,WAAW,CAHbK,UAAU;IAAVA,UAAU,GAAAD,qBAAA,cAAG,EAAE,GAAAA,qBAAA;IACfE,kBAAkB,GAEhBN,WAAW,CAFbM,kBAAkB;IAClBC,oBAAoB,GAClBP,WAAW,CADbO,oBAAoB;EAGtB,IAAMlH,KAAK,GAAGiB,IAAI,CAACkG,KAAK,CAACnH,KAAK,IAAI,EAAE;EAEpC,IAAAoH,gBAAS,EAAC,YAAM;IACd,IAAI1B,QAAQ,EAAE;MACZM,cAAc,CAAC,IAAI,CAAC;IACtB;EACF,CAAC,EAAE,CAACN,QAAQ,CAAC,CAAC;EAEd,IAAA0B,gBAAS,EAAC,YAAM;IACd5C,MAAM,CAAC6C,cAAc,GAAG,CAAC,CAACtB,WAAW;EACvC,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,IAAAqB,gBAAS,EAAC,YAAM;IACd;IACA,IAAME,QAAQ,GAAGC,QAAQ,CAACC,IAAI,CAACC,qBAAqB,CAAC,CAAC;IACtD,IAAQtF,IAAI,GAAKqC,MAAM,CAACxC,KAAK,CAACE,SAAS,CAA/BC,IAAI;IACZ,IAAMuF,KAAK,GAAGlD,MAAM,CAAC1C,IAAI,CAAC6F,WAAW,CAACxF,IAAI,CAAC;IAC3CqE,WAAW,CAAC;MACVJ,GAAG,EAAEsB,KAAK,CAACtB,GAAG,GAAGwB,IAAI,CAACC,GAAG,CAACP,QAAQ,CAAClB,GAAG,CAAC,GAAG,EAAE;MAAE;MAC9CC,IAAI,EAAEqB,KAAK,CAACrB;IACd,CAAC,CAAC;IAEF,IAAMyB,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAI/F,KAAK,EAAK;MAAA,IAAAgG,qBAAA,EAAAC,SAAA,EAAAC,eAAA,EAAAC,gBAAA;MACpC,IAAMC,MAAM,GAAGpG,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEoG,MAAM;;MAE5B;MACA;MACA,IAAMC,uBAAuB,GAC3B,EAAAL,qBAAA,IAAAC,SAAA,GAAAT,QAAQ,EAACc,gBAAgB,cAAAN,qBAAA,uBAAzBA,qBAAA,CAAAzJ,IAAA,CAAA0J,SAAA,EACE,0GACF,CAAC,KAAI,EAAE;MAET,IAAMM,yBAAyB,GAAGF,uBAAuB,CAACjJ,MAAM,GAAG,CAAC;MACpE,IAAMoJ,2BAA2B,GAC/B,CAAC,EAAEJ,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEK,EAAE,IAAIL,MAAM,CAACK,EAAE,CAACC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,IAC9D,CAAC,EAACN,MAAM,aAANA,MAAM,gBAAAF,eAAA,GAANE,MAAM,CAAEO,OAAO,cAAAT,eAAA,eAAfA,eAAA,CAAA3J,IAAA,CAAA6J,MAAM,EAAY,gCAAgC,CAAC;MAEvD,IACElC,UAAU,CAAC0C,OAAO,IAClB,CAAC1C,UAAU,CAAC0C,OAAO,CAACC,QAAQ,CAACT,MAAM,CAAC,IACpC,EAACA,MAAM,aAANA,MAAM,gBAAAD,gBAAA,GAANC,MAAM,CAAEO,OAAO,cAAAR,gBAAA,eAAfA,gBAAA,CAAA5J,IAAA,CAAA6J,MAAM,EAAY,oBAAoB,CAAC,KACxC,CAACG,yBAAyB,IAC1B,CAACC,2BAA2B,EAC5B;QACAvC,cAAc,CAAC,KAAK,CAAC;MACvB;IACF,CAAC;IAED,IAAID,WAAW,EAAE;MACf;MACA;MACAwB,QAAQ,CAACsB,gBAAgB,CAAC,OAAO,EAAEf,kBAAkB,CAAC;IACxD,CAAC,MAAM;MACLP,QAAQ,CAACuB,mBAAmB,CAAC,OAAO,EAAEhB,kBAAkB,CAAC;IAC3D;IAEA,OAAO;MAAA,OAAMP,QAAQ,CAACuB,mBAAmB,CAAC,OAAO,EAAEhB,kBAAkB,CAAC;IAAA;EACxE,CAAC,EAAE,CAACtD,MAAM,EAAEuB,WAAW,CAAC,CAAC;EAEzB,IAAMgD,YAAY,GAAG,SAAfA,YAAYA,CAAIC,QAAQ,EAAK;IACjCvD,gBAAgB,CAAC;MAAEzF,KAAK,EAAEgJ;IAAS,CAAC,CAAC;EACvC,CAAC;EAED,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAID,QAAQ,EAAK;IAC/BvD,gBAAgB,CAAC;MAAEzF,KAAK,EAAEgJ;IAAS,CAAC,CAAC;IACrChD,cAAc,CAAC,KAAK,CAAC;IAErBxB,MAAM,CAAC6C,cAAc,GAAG,KAAK;IAE7B,IAAA6B,aAAA,GAA+B1E,MAAM,CAACxC,KAAK;MAAnCE,SAAS,GAAAgH,aAAA,CAAThH,SAAS;MAAEtB,EAAE,GAAAsI,aAAA,CAAFtI,EAAE;MAAEG,GAAG,GAAAmI,aAAA,CAAHnI,GAAG;IAC1B,IAAM6D,GAAG,GAAG1B,+BAAa,CAACD,MAAM,CAAClC,GAAG,EAAEmB,SAAS,CAACC,IAAI,GAAG,CAAC,CAAC;;IAEzD;IACAvB,EAAE,CAACmC,YAAY,CAAC6B,GAAG,CAAC;IACpBJ,MAAM,CAAC1C,IAAI,CAACG,QAAQ,CAACrB,EAAE,CAAC;IACxB4D,MAAM,CAAC2E,QAAQ,CAACC,KAAK,CAAC,CAAC;EACzB,CAAC;EAED,oBACExM,MAAA,YAAA0I,aAAA,CAACpI,OAAA,CAAAmM,eAAe;IACdC,SAAS,EAAC,WAAW;IACrBC,KAAK,EAAE;MACLC,OAAO,EAAE,aAAa;MACtBC,MAAM,EAAE,SAAS;MACjBC,MAAM,EAAE;IACV,CAAE;IACF,iBAAehE;EAAS,gBAExB9I,MAAA,YAAA0I,aAAA;IAAKqE,OAAO,EAAE,SAATA,OAAOA,CAAA;MAAA,OAAQ3D,cAAc,CAAC,IAAI,CAAC;IAAA,CAAC;IAAC4D,eAAe,EAAE;EAAM,gBAC/DhN,MAAA,YAAA0I,aAAA,CAAClI,YAAA,CAAAyM,WAAW;IAAC7J,KAAK,EAAEA;EAAM,CAAE,CACzB,CAAC,EACL+F,WAAW,iBACV+D,oBAAQ,CAACC,YAAY,cACnBnN,MAAA,YAAA0I,aAAA;IACE0E,GAAG,EAAE/D,UAAW;IAChB,oBAAkBzB,MAAM,CAACyF,UAAW;IACpCV,KAAK,EAAE;MACLhD,QAAQ,EAAE,UAAU;MACpBH,GAAG,KAAA8D,MAAA,CAAK3D,QAAQ,CAACH,GAAG,OAAI;MACxBC,IAAI,KAAA6D,MAAA,CAAK3D,QAAQ,CAACF,IAAI,OAAI;MAC1B8D,MAAM,EAAE,EAAE;MACVC,UAAU,EAAE,0CAA0C;MACtDC,SAAS,EACP;IACJ;EAAE,gBAEFzN,MAAA,YAAA0I,aAAA,CAAClI,YAAA,CAAAkN,WAAW;IACVtK,KAAK,EAAEA,KAAM;IACbuK,SAAS;IACTC,QAAQ,EAAEzB,YAAa;IACvB0B,MAAM,EAAExB,UAAW;IACnBrC,UAAU,EAAEA,UAAW;IACvBE,oBAAoB,EAAEA,oBAAqB;IAC3C4D,cAAc,EAAEhL,sBAAsB,CAACsH,UAAU,CAAE;IACnDC,kBAAkB,EAAEA,kBAAmB;IACvCC,oBAAoB,EAAEA;EAAqB,CAC5C,CACE,CAAC,EACNK,QAAQ,CAACC,IACX,CACa,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -149,9 +149,11 @@ var ResponseAreaExtension = exports.ResponseAreaExtension = _core.Extension.crea
149
149
  }
150
150
 
151
151
  // --- Slate: indexing logic (kept identical) ---
152
- if (lastIndexMap[typeName] === undefined) lastIndexMap[typeName] = 0;
152
+ if (lastIndexMap[typeName] === undefined) {
153
+ lastIndexMap[typeName] = 0;
154
+ }
153
155
  var prevIndex = lastIndexMap[typeName];
154
- var newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;
156
+ var newIndex = prevIndex + 1;
155
157
 
156
158
  // Slate increments map even if newIndex === 0
157
159
  lastIndexMap[typeName] += 1;
@@ -160,7 +162,9 @@ var ResponseAreaExtension = exports.ResponseAreaExtension = _core.Extension.crea
160
162
  typeName: typeName,
161
163
  index: newIndex
162
164
  });
163
- if (!newInline) return false;
165
+ if (!newInline) {
166
+ return false;
167
+ }
164
168
 
165
169
  // --- Insert logic ---
166
170
  var selection = state.selection;
@@ -185,7 +189,9 @@ var ResponseAreaExtension = exports.ResponseAreaExtension = _core.Extension.crea
185
189
  if (usedPos == null) {
186
190
  usedPos = tryInsertAt(tr.doc.content.size);
187
191
  }
188
- if (usedPos == null) return false;
192
+ if (usedPos == null) {
193
+ return false;
194
+ }
189
195
 
190
196
  // Optionally select the node you just inserted (like your original command)
191
197
  // tr.setSelection(NodeSelection.create(tr.doc, usedPos))
@@ -1 +1 @@
1
- {"version":3,"file":"responseArea.js","names":["_react","_interopRequireDefault","require","_prosemirrorState","_core","_react2","_ExplicitConstructedResponse","_DragInTheBlank","_InlineDropdown","_MathTemplated","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","lastIndexMap","normalizeType","type","String","replace","getAttrIndex","node","attrs","index","collectNodesOfType","doc","typeName","results","descendants","pos","name","countNodesOfType","count","getDefaultNode","_ref","schema","nodeType","nodes","create","id","value","selectionAfterPos","$pos","resolve","Math","min","content","size","TextSelection","near","ResponseAreaExtension","exports","Extension","addOptions","maxResponseAreas","error","options","respAreaToolbar","onHandleAreaChange","addProseMirrorPlugins","_this","key","PluginKey","concat","Plugin","view","undefined","state","idx","n","parseInt","Number","isNaN","update","prevState","eq","currentList","oldList","toolbar","disabled","currentIndexSet","Set","map","x","removed","has","addCommands","_this2","insertResponseArea","_ref2","tr","dispatch","commands","currentCount","prevIndex","newIndex","newInline","selection","insertPos","from","tryInsertAt","insert","usedPos","includes","setSelection","NodeSelection","after","nodeSize","focus","refreshResponseArea","_ref3","$from","nodeAfter","nodePos","setNodeMarkup","updated","Date","now","ExplicitConstructedResponseNode","Node","group","inline","atom","addAttributes","parseHTML","tag","getAttrs","el","dataset","renderHTML","_ref4","HTMLAttributes","addNodeView","_this3","ReactNodeViewRenderer","props","createElement","MathTemplatedNode","_ref5","_this4","DragInTheBlankNode","inTable","_ref6","_this5","InlineDropdownNode","_ref7","_this6"],"sources":["../../src/extensions/responseArea.js"],"sourcesContent":["import React from 'react';\nimport { NodeSelection, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport { Extension } from '@tiptap/core';\nimport { Node, ReactNodeViewRenderer } from '@tiptap/react';\nimport ExplicitConstructedResponse from '../components/respArea/ExplicitConstructedResponse';\nimport DragInTheBlank from '../components/respArea/DragInTheBlank/DragInTheBlank';\nimport InlineDropdown from '../components/respArea/InlineDropdown';\nimport MathTemplated from '../components/respArea/MathTemplated';\n\nconst lastIndexMap = {};\n\nconst normalizeType = (type) => String(type || '').replace(/-/g, '_');\n\nconst getAttrIndex = (node) => (node && node.attrs && node.attrs.index != null ? String(node.attrs.index) : null);\n\nconst collectNodesOfType = (doc, typeName) => {\n const results = [];\n\n doc.descendants((node, pos) => {\n if (node.type && node.type.name === typeName) {\n const index = getAttrIndex(node);\n if (index != null) results.push({ index, pos, node });\n }\n return true;\n });\n\n return results;\n};\n\nconst countNodesOfType = (doc, typeName) => {\n let count = 0;\n doc.descendants((node) => {\n if (node.type && node.type.name === typeName) count += 1;\n return true;\n });\n return count;\n};\n\nconst getDefaultNode = ({ schema, typeName, index }) => {\n const nodeType = schema.nodes[typeName];\n if (!nodeType) return null;\n\n // mirror your Slate \"getDefaultElement(opts, newIndex)\"\n // customize attrs as needed:\n return nodeType.create({\n index: String(index),\n id: String(index),\n value: '',\n });\n};\n\n// Find a good cursor position *after* an inserted node.\nconst selectionAfterPos = (doc, pos) => {\n const $pos = doc.resolve(Math.min(pos, doc.content.size));\n return TextSelection.near($pos, 1);\n};\n\nexport const ResponseAreaExtension = Extension.create({\n name: 'responseArea',\n\n addOptions() {\n return {\n maxResponseAreas: null,\n error: null,\n options: null,\n respAreaToolbar: null,\n onHandleAreaChange: null,\n };\n },\n\n addProseMirrorPlugins() {\n if (!this.options.type) {\n return [];\n }\n\n const typeName = normalizeType(this.options.type);\n const key = new PluginKey(`response-area-watcher:${typeName}`);\n\n return [\n new Plugin({\n key,\n\n view: (view) => {\n // Lazy init lastIndexMap[typeName]\n if (lastIndexMap[typeName] === undefined) {\n lastIndexMap[typeName] = 0;\n\n view.state.doc.descendants((node) => {\n if (node.type && node.type.name === typeName) {\n const idx = getAttrIndex(node);\n if (idx != null) {\n const n = parseInt(idx, 10);\n if (!Number.isNaN(n) && n > lastIndexMap[typeName]) {\n lastIndexMap[typeName] = n;\n }\n }\n }\n return true;\n });\n }\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n if (prevState.doc.eq(state.doc)) return;\n\n const currentList = collectNodesOfType(state.doc, typeName);\n const oldList = collectNodesOfType(prevState.doc, typeName);\n\n if (this.options.toolbar) {\n this.options.toolbar.disabled = currentList.length >= this.options.maxResponseAreas;\n }\n\n // Removed elements (same logic as Slate)\n if (oldList.length > currentList.length) {\n const currentIndexSet = new Set(currentList.map((x) => x.index));\n\n const removed = oldList.filter((x) => !currentIndexSet.has(x.index));\n\n if (removed.length && typeof this.options.onHandleAreaChange === 'function') {\n this.options.onHandleAreaChange(removed);\n }\n }\n },\n };\n },\n }),\n ];\n },\n\n addCommands() {\n return {\n insertResponseArea:\n (type) =>\n ({ tr, state, dispatch, commands }) => {\n const typeName = normalizeType(type);\n\n // --- Slate: currentRespAreaList + max check ---\n const currentCount = countNodesOfType(state.doc, typeName);\n if (currentCount >= this.options.maxResponseAreas) {\n return false;\n }\n\n // --- Slate: indexing logic (kept identical) ---\n if (lastIndexMap[typeName] === undefined) lastIndexMap[typeName] = 0;\n\n const prevIndex = lastIndexMap[typeName];\n const newIndex = prevIndex === 0 ? prevIndex : prevIndex + 1;\n\n // Slate increments map even if newIndex === 0\n lastIndexMap[typeName] += 1;\n\n const newInline = getDefaultNode({\n schema: state.schema,\n typeName,\n index: newIndex,\n });\n\n if (!newInline) return false;\n\n // --- Insert logic ---\n const { selection } = state;\n let insertPos = selection.from;\n\n // If we're in a NodeSelection, insert before/after is ambiguous;\n // We'll insert at its \"from\" (like your current code).\n // If insertion fails, we fallback to end of doc.\n const tryInsertAt = (pos) => {\n try {\n tr.insert(pos, newInline);\n return pos;\n } catch (e) {\n return null;\n }\n };\n\n let usedPos = tryInsertAt(insertPos);\n\n // Slate branch: \"markup empty and there's no focus\"\n // ProseMirror doesn't expose \"no focus\" the same way, so the closest\n // equivalent fallback is inserting at end of document.\n if (usedPos == null) {\n usedPos = tryInsertAt(tr.doc.content.size);\n }\n if (usedPos == null) return false;\n\n // Optionally select the node you just inserted (like your original command)\n // tr.setSelection(NodeSelection.create(tr.doc, usedPos))\n\n // --- Cursor move behavior for certain types (Slate: moveFocusTo next text) ---\n if (['math_templated', 'inline_dropdown', 'explicit_constructed_response'].includes(typeName)) {\n tr.setSelection(NodeSelection.create(tr.doc, usedPos));\n } else {\n const after = usedPos + newInline.nodeSize;\n tr.setSelection(selectionAfterPos(tr.doc, after));\n }\n\n if (dispatch) {\n commands.focus();\n dispatch(tr);\n }\n\n return true;\n },\n refreshResponseArea:\n () =>\n ({ tr, state, commands, dispatch }) => {\n const { selection } = state;\n const node = selection.$from.nodeAfter;\n const nodePos = selection.from;\n\n tr.setNodeMarkup(nodePos, undefined, { ...node?.attrs, updated: `${Date.now()}` });\n tr.setSelection(NodeSelection.create(tr.doc, nodePos));\n\n if (dispatch) {\n commands.focus();\n dispatch(tr);\n }\n\n return true;\n },\n };\n },\n});\n\n/**\n * ExplicitConstructedResponse Node\n */\nexport const ExplicitConstructedResponseNode = Node.create({\n name: 'explicit_constructed_response',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"explicit_constructed_response\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'explicit_constructed_response',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <ExplicitConstructedResponse {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * MathTemplated Node\n */\nexport const MathTemplatedNode = Node.create({\n name: 'math_templated',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"math_templated\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'math_templated',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MathTemplated {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * DragInTheBlank Node\n */\nexport const DragInTheBlankNode = Node.create({\n name: 'drag_in_the_blank',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n id: { default: null },\n value: { default: '' },\n inTable: { default: null },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"drag_in_the_blank\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'drag_in_the_blank',\n 'data-index': HTMLAttributes.index,\n 'data-id': HTMLAttributes.id,\n 'data-value': HTMLAttributes.value,\n 'data-in-table': HTMLAttributes.inTable,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <DragInTheBlank {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * InlineDropdown Node\n */\nexport const InlineDropdownNode = Node.create({\n name: 'inline_dropdown',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"inline_dropdown\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'inline_dropdown',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <InlineDropdown {...{ ...props, options: this.options }} />);\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"responseArea.js","names":["_react","_interopRequireDefault","require","_prosemirrorState","_core","_react2","_ExplicitConstructedResponse","_DragInTheBlank","_InlineDropdown","_MathTemplated","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","lastIndexMap","normalizeType","type","String","replace","getAttrIndex","node","attrs","index","collectNodesOfType","doc","typeName","results","descendants","pos","name","countNodesOfType","count","getDefaultNode","_ref","schema","nodeType","nodes","create","id","value","selectionAfterPos","$pos","resolve","Math","min","content","size","TextSelection","near","ResponseAreaExtension","exports","Extension","addOptions","maxResponseAreas","error","options","respAreaToolbar","onHandleAreaChange","addProseMirrorPlugins","_this","key","PluginKey","concat","Plugin","view","undefined","state","idx","n","parseInt","Number","isNaN","update","prevState","eq","currentList","oldList","toolbar","disabled","currentIndexSet","Set","map","x","removed","has","addCommands","_this2","insertResponseArea","_ref2","tr","dispatch","commands","currentCount","prevIndex","newIndex","newInline","selection","insertPos","from","tryInsertAt","insert","usedPos","includes","setSelection","NodeSelection","after","nodeSize","focus","refreshResponseArea","_ref3","$from","nodeAfter","nodePos","setNodeMarkup","updated","Date","now","ExplicitConstructedResponseNode","Node","group","inline","atom","addAttributes","parseHTML","tag","getAttrs","el","dataset","renderHTML","_ref4","HTMLAttributes","addNodeView","_this3","ReactNodeViewRenderer","props","createElement","MathTemplatedNode","_ref5","_this4","DragInTheBlankNode","inTable","_ref6","_this5","InlineDropdownNode","_ref7","_this6"],"sources":["../../src/extensions/responseArea.js"],"sourcesContent":["import React from 'react';\nimport { NodeSelection, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\nimport { Extension } from '@tiptap/core';\nimport { Node, ReactNodeViewRenderer } from '@tiptap/react';\nimport ExplicitConstructedResponse from '../components/respArea/ExplicitConstructedResponse';\nimport DragInTheBlank from '../components/respArea/DragInTheBlank/DragInTheBlank';\nimport InlineDropdown from '../components/respArea/InlineDropdown';\nimport MathTemplated from '../components/respArea/MathTemplated';\n\nconst lastIndexMap = {};\n\nconst normalizeType = (type) => String(type || '').replace(/-/g, '_');\n\nconst getAttrIndex = (node) => (node && node.attrs && node.attrs.index != null ? String(node.attrs.index) : null);\n\nconst collectNodesOfType = (doc, typeName) => {\n const results = [];\n\n doc.descendants((node, pos) => {\n if (node.type && node.type.name === typeName) {\n const index = getAttrIndex(node);\n if (index != null) results.push({ index, pos, node });\n }\n return true;\n });\n\n return results;\n};\n\nconst countNodesOfType = (doc, typeName) => {\n let count = 0;\n doc.descendants((node) => {\n if (node.type && node.type.name === typeName) count += 1;\n return true;\n });\n return count;\n};\n\nconst getDefaultNode = ({ schema, typeName, index }) => {\n const nodeType = schema.nodes[typeName];\n if (!nodeType) return null;\n\n // mirror your Slate \"getDefaultElement(opts, newIndex)\"\n // customize attrs as needed:\n return nodeType.create({\n index: String(index),\n id: String(index),\n value: '',\n });\n};\n\n// Find a good cursor position *after* an inserted node.\nconst selectionAfterPos = (doc, pos) => {\n const $pos = doc.resolve(Math.min(pos, doc.content.size));\n return TextSelection.near($pos, 1);\n};\n\nexport const ResponseAreaExtension = Extension.create({\n name: 'responseArea',\n\n addOptions() {\n return {\n maxResponseAreas: null,\n error: null,\n options: null,\n respAreaToolbar: null,\n onHandleAreaChange: null,\n };\n },\n\n addProseMirrorPlugins() {\n if (!this.options.type) {\n return [];\n }\n\n const typeName = normalizeType(this.options.type);\n const key = new PluginKey(`response-area-watcher:${typeName}`);\n\n return [\n new Plugin({\n key,\n\n view: (view) => {\n // Lazy init lastIndexMap[typeName]\n if (lastIndexMap[typeName] === undefined) {\n lastIndexMap[typeName] = 0;\n\n view.state.doc.descendants((node) => {\n if (node.type && node.type.name === typeName) {\n const idx = getAttrIndex(node);\n if (idx != null) {\n const n = parseInt(idx, 10);\n if (!Number.isNaN(n) && n > lastIndexMap[typeName]) {\n lastIndexMap[typeName] = n;\n }\n }\n }\n return true;\n });\n }\n\n return {\n update: (view, prevState) => {\n const state = view.state;\n if (prevState.doc.eq(state.doc)) return;\n\n const currentList = collectNodesOfType(state.doc, typeName);\n const oldList = collectNodesOfType(prevState.doc, typeName);\n\n if (this.options.toolbar) {\n this.options.toolbar.disabled = currentList.length >= this.options.maxResponseAreas;\n }\n\n // Removed elements (same logic as Slate)\n if (oldList.length > currentList.length) {\n const currentIndexSet = new Set(currentList.map((x) => x.index));\n\n const removed = oldList.filter((x) => !currentIndexSet.has(x.index));\n\n if (removed.length && typeof this.options.onHandleAreaChange === 'function') {\n this.options.onHandleAreaChange(removed);\n }\n }\n },\n };\n },\n }),\n ];\n },\n\n addCommands() {\n return {\n insertResponseArea:\n (type) =>\n ({ tr, state, dispatch, commands }) => {\n const typeName = normalizeType(type);\n\n // --- Slate: currentRespAreaList + max check ---\n const currentCount = countNodesOfType(state.doc, typeName);\n if (currentCount >= this.options.maxResponseAreas) {\n return false;\n }\n\n // --- Slate: indexing logic (kept identical) ---\n if (lastIndexMap[typeName] === undefined) {\n lastIndexMap[typeName] = 0;\n }\n\n const prevIndex = lastIndexMap[typeName];\n const newIndex = prevIndex + 1;\n\n // Slate increments map even if newIndex === 0\n lastIndexMap[typeName] += 1;\n\n const newInline = getDefaultNode({\n schema: state.schema,\n typeName,\n index: newIndex,\n });\n\n if (!newInline) {\n return false;\n }\n\n // --- Insert logic ---\n const { selection } = state;\n let insertPos = selection.from;\n\n // If we're in a NodeSelection, insert before/after is ambiguous;\n // We'll insert at its \"from\" (like your current code).\n // If insertion fails, we fallback to end of doc.\n const tryInsertAt = (pos) => {\n try {\n tr.insert(pos, newInline);\n return pos;\n } catch (e) {\n return null;\n }\n };\n\n let usedPos = tryInsertAt(insertPos);\n\n // Slate branch: \"markup empty and there's no focus\"\n // ProseMirror doesn't expose \"no focus\" the same way, so the closest\n // equivalent fallback is inserting at end of document.\n if (usedPos == null) {\n usedPos = tryInsertAt(tr.doc.content.size);\n }\n\n if (usedPos == null) {\n return false;\n }\n\n // Optionally select the node you just inserted (like your original command)\n // tr.setSelection(NodeSelection.create(tr.doc, usedPos))\n\n // --- Cursor move behavior for certain types (Slate: moveFocusTo next text) ---\n if (['math_templated', 'inline_dropdown', 'explicit_constructed_response'].includes(typeName)) {\n tr.setSelection(NodeSelection.create(tr.doc, usedPos));\n } else {\n const after = usedPos + newInline.nodeSize;\n tr.setSelection(selectionAfterPos(tr.doc, after));\n }\n\n if (dispatch) {\n commands.focus();\n dispatch(tr);\n }\n\n return true;\n },\n refreshResponseArea:\n () =>\n ({ tr, state, commands, dispatch }) => {\n const { selection } = state;\n const node = selection.$from.nodeAfter;\n const nodePos = selection.from;\n\n tr.setNodeMarkup(nodePos, undefined, { ...node?.attrs, updated: `${Date.now()}` });\n tr.setSelection(NodeSelection.create(tr.doc, nodePos));\n\n if (dispatch) {\n commands.focus();\n dispatch(tr);\n }\n\n return true;\n },\n };\n },\n});\n\n/**\n * ExplicitConstructedResponse Node\n */\nexport const ExplicitConstructedResponseNode = Node.create({\n name: 'explicit_constructed_response',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"explicit_constructed_response\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'explicit_constructed_response',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <ExplicitConstructedResponse {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * MathTemplated Node\n */\nexport const MathTemplatedNode = Node.create({\n name: 'math_templated',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"math_templated\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'math_templated',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <MathTemplated {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * DragInTheBlank Node\n */\nexport const DragInTheBlankNode = Node.create({\n name: 'drag_in_the_blank',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n id: { default: null },\n value: { default: '' },\n inTable: { default: null },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"drag_in_the_blank\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'drag_in_the_blank',\n 'data-index': HTMLAttributes.index,\n 'data-id': HTMLAttributes.id,\n 'data-value': HTMLAttributes.value,\n 'data-in-table': HTMLAttributes.inTable,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <DragInTheBlank {...{ ...props, options: this.options }} />);\n },\n});\n\n/**\n * InlineDropdown Node\n */\nexport const InlineDropdownNode = Node.create({\n name: 'inline_dropdown',\n group: 'inline',\n inline: true,\n atom: true,\n addAttributes() {\n return {\n index: { default: null },\n value: { default: '' },\n updated: { default: '' },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span[data-type=\"inline_dropdown\"]',\n getAttrs: (el) => ({\n index: el.dataset.index,\n value: el.dataset.value,\n }),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return [\n 'span',\n {\n 'data-type': 'inline_dropdown',\n 'data-index': HTMLAttributes.index,\n 'data-value': HTMLAttributes.value,\n },\n ];\n },\n addNodeView() {\n return ReactNodeViewRenderer((props) => <InlineDropdown {...{ ...props, options: this.options }} />);\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": "1.2.0-next.21",
6
+ "version": "1.2.0-next.23",
7
7
  "description": "",
8
8
  "license": "ISC",
9
9
  "main": "lib/index.js",
@@ -16,10 +16,10 @@
16
16
  "@dnd-kit/utilities": "3.2.2",
17
17
  "@mui/icons-material": "^7.3.4",
18
18
  "@mui/material": "^7.3.4",
19
- "@pie-lib/drag": "^3.2.0-next.7",
20
- "@pie-lib/math-input": "^7.2.0-next.10",
19
+ "@pie-lib/drag": "^3.2.0-next.8",
20
+ "@pie-lib/math-input": "^7.2.0-next.11",
21
21
  "@pie-lib/math-rendering": "^4.2.0-next.3",
22
- "@pie-lib/math-toolbar": "^2.2.0-next.12",
22
+ "@pie-lib/math-toolbar": "^2.2.0-next.13",
23
23
  "@pie-lib/render-ui": "^5.2.0-next.7",
24
24
  "@tiptap/core": "3.0.9",
25
25
  "@tiptap/extension-character-count": "3.0.9",
@@ -52,13 +52,13 @@
52
52
  "to-style": "^1.3.3"
53
53
  },
54
54
  "devDependencies": {
55
- "@pie-framework/mathquill": "1.2.1-beta.0",
55
+ "@pie-framework/mathquill": "1.2.1-beta.1",
56
56
  "react": "^18.2.0",
57
57
  "react-dom": "^18.2.0"
58
58
  },
59
59
  "peerDependencies": {
60
60
  "react": "^18.2.0"
61
61
  },
62
- "gitHead": "a5d035b59963a4bd600a3e0b9e68440665ba69fd",
62
+ "gitHead": "db9f6fb2e0cff48df1b6ffe765604d3e67e9f3f9",
63
63
  "scripts": {}
64
64
  }
@@ -170,6 +170,7 @@ export const EditableHtml = (props) => {
170
170
  MathTemplatedNode.configure(props.responseAreaProps),
171
171
  MathNode.configure({
172
172
  toolbarOpts: toolbarOptsToUse,
173
+ math: props.pluginProps?.math || {},
173
174
  }),
174
175
  SubScript,
175
176
  SuperScript,
@@ -378,10 +379,15 @@ const StyledEditorContent = styled(EditorContent, {
378
379
  margin: '0',
379
380
  },
380
381
 
381
- '& p.is-editor-empty:first-child::before, & div.is-editor-empty:first-child::before': {
382
+ // Out of flow so the caret stays at the start of the block; in-flow ::before pushes the caret after the hint text.
383
+ '& p.is-editor-empty, & div.is-editor-empty': {
384
+ position: 'relative',
385
+ },
386
+ '& p.is-editor-empty::before, & div.is-editor-empty::before': {
382
387
  content: 'attr(data-placeholder)',
383
- float: 'left',
384
- height: 0,
388
+ position: 'absolute',
389
+ left: 0,
390
+ top: 0,
385
391
  color: '#9CA3AF',
386
392
  pointerEvents: 'none',
387
393
  whiteSpace: 'pre-wrap',
@@ -153,6 +153,12 @@ function TiptapContainer(props) {
153
153
  ref,
154
154
  } = props;
155
155
 
156
+ useEffect(() => {
157
+ if (editor && rootRef.current) {
158
+ editor._tiptapContainerEl = rootRef.current;
159
+ }
160
+ }, [editor, rootRef.current]);
161
+
156
162
  useEffect(() => {
157
163
  if (editor && autoFocus) {
158
164
  Promise.resolve().then(() => {
@@ -73,6 +73,14 @@ describe('InlineDropdown', () => {
73
73
  expect(valueDiv).toBeInTheDocument();
74
74
  });
75
75
 
76
+ it('uses 2px horizontal margin on the value control and no horizontal margin on the wrapper', () => {
77
+ const { container, getByTestId } = render(<InlineDropdown {...defaultProps} />);
78
+ const valueDiv = container.querySelector('div[style*="border"]');
79
+ expect(valueDiv).toHaveStyle({ margin: '0 2px' });
80
+ const wrapper = getByTestId('node-view-wrapper');
81
+ expect(wrapper.getAttribute('style') || '').not.toMatch(/margin/);
82
+ });
83
+
76
84
  it('renders chevron icon', () => {
77
85
  const { container } = render(<InlineDropdown {...defaultProps} />);
78
86
  const chevron = container.querySelector('svg');
@@ -1,6 +1,8 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { NodeViewWrapper } from '@tiptap/react';
3
+ import ReactDOM from 'react-dom';
3
4
  import PropTypes from 'prop-types';
5
+ import CustomToolbarWrapper from '../../extensions/custom-toolbar-wrapper';
4
6
 
5
7
  const ExplicitConstructedResponse = (props) => {
6
8
  const { editor, node, getPos, options, selected } = props;
@@ -9,7 +11,7 @@ const ExplicitConstructedResponse = (props) => {
9
11
  const { respAreaToolbar, error: errorFn } = options;
10
12
  const pos = getPos();
11
13
  const [showToolbar, setShowToolbar] = useState(false);
12
- const EcrToolbar = respAreaToolbar([node, pos], editor, () => {});
14
+ const EcrToolbar = respAreaToolbar([node, pos], editor, () => { });
13
15
  const toolbarRef = useRef(null);
14
16
 
15
17
  let error;
@@ -21,12 +23,6 @@ const ExplicitConstructedResponse = (props) => {
21
23
  error = !!errorValue?.[respIndex]?.[0];
22
24
  }
23
25
 
24
- const handleDone = (newLatex) => {
25
- updateAttributes({ latex: newLatex });
26
- setShowToolbar(false);
27
- editor.commands.focus();
28
- };
29
-
30
26
  useEffect(() => {
31
27
  const { selection } = editor.state;
32
28
  const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;
@@ -98,6 +94,26 @@ const ExplicitConstructedResponse = (props) => {
98
94
  <EcrToolbar />
99
95
  </div>
100
96
  )}
97
+ {showToolbar && editor._tiptapContainerEl && ReactDOM.createPortal(
98
+ <CustomToolbarWrapper
99
+ deletable
100
+ toolbarOpts={{ minWidth: 'auto' }}
101
+ autoWidth
102
+ style={{ top: -40, left: 0, right: 0 }}
103
+ onDelete={() => {
104
+ const { tr } = editor.state;
105
+ tr.delete(pos, pos + node.nodeSize);
106
+ // Prevent the debounced onBlur/onDone from firing into the
107
+ // now-deleted node's stale position
108
+ editor._toolbarOpened = false;
109
+ editor.view.dispatch(tr);
110
+ setShowToolbar(false);
111
+ editor.commands.focus();
112
+ }}
113
+ showDone={false}
114
+ />,
115
+ editor._tiptapContainerEl,
116
+ )}
101
117
  </NodeViewWrapper>
102
118
  );
103
119
  };
@@ -72,7 +72,6 @@ const InlineDropdown = (props) => {
72
72
  style={{
73
73
  display: 'inline-flex',
74
74
  height: '50px',
75
- margin: '0 5px',
76
75
  cursor: 'pointer',
77
76
  }}
78
77
  >
@@ -85,7 +84,7 @@ const InlineDropdown = (props) => {
85
84
  border: '1px solid #C0C3CF',
86
85
  boxSizing: 'border-box',
87
86
  borderRadius: '3px',
88
- margin: '0 4px',
87
+ margin: '0 2px',
89
88
  position: 'relative',
90
89
  alignItems: 'center',
91
90
  }}
@@ -313,6 +313,27 @@ describe('MathNodeView', () => {
313
313
  });
314
314
  });
315
315
 
316
+ it('does not close toolbar when clicking equation editor dropdown', async () => {
317
+ const { queryByTestId } = render(<MathNodeView {...defaultProps} selected={true} />);
318
+
319
+ await waitFor(() => {
320
+ expect(queryByTestId('math-toolbar')).toBeInTheDocument();
321
+ });
322
+
323
+ // Simulate MUI Select's portal dropdown container.
324
+ const dropdown = document.createElement('div');
325
+ dropdown.id = 'equation-editor-select-listbox';
326
+ document.body.appendChild(dropdown);
327
+
328
+ fireEvent.click(dropdown);
329
+
330
+ await waitFor(() => {
331
+ expect(queryByTestId('math-toolbar')).toBeInTheDocument();
332
+ });
333
+
334
+ document.body.removeChild(dropdown);
335
+ });
336
+
316
337
  it('renders with empty latex', () => {
317
338
  const nodeWithEmptyLatex = { attrs: { latex: '' } };
318
339
  const { getByTestId } = render(<MathNodeView {...defaultProps} node={nodeWithEmptyLatex} />);