@pie-lib/editable-html-tip-tap 2.1.19 → 2.1.20-beta.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 +0 -130
- package/lib/__tests__/EditableHtml.test.js +831 -0
- package/lib/__tests__/constants.test.js +21 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
- package/lib/__tests__/extensions.test.js +209 -0
- package/lib/__tests__/index.test.js +250 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/spellcheck.test.js +142 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/components/EditableHtml.js +0 -56
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/MenuBar.js +12 -81
- package/lib/components/MenuBar.js.map +1 -1
- package/lib/components/TiptapContainer.js +2 -2
- package/lib/components/TiptapContainer.js.map +1 -1
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/CharacterPicker.test.js +455 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
- package/lib/components/__tests__/ImageToolbar.test.js +185 -0
- package/lib/components/__tests__/InlineDropdown.test.js +839 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
- package/lib/components/__tests__/MediaDialog.test.js +433 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MenuBar.test.js +502 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TextAlign.test.js +209 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/characterUtils.test.js +178 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/common/toolbar-buttons.js +5 -6
- package/lib/components/common/toolbar-buttons.js.map +1 -1
- package/lib/components/icons/TableIcons.js +1 -3
- package/lib/components/icons/TableIcons.js.map +1 -1
- package/lib/components/icons/TextAlign.js +5 -14
- package/lib/components/icons/TextAlign.js.map +1 -1
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
- package/lib/components/respArea/MathTemplated.js +8 -14
- package/lib/components/respArea/MathTemplated.js.map +1 -1
- package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
- package/lib/extensions/__tests__/css.test.js +214 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
- package/lib/extensions/__tests__/divNode.test.js +108 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
- package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
- package/lib/extensions/__tests__/extended-table.test.js +200 -0
- package/lib/extensions/__tests__/image-component.test.js +432 -0
- package/lib/extensions/__tests__/image.test.js +313 -0
- package/lib/extensions/__tests__/math.test.js +1411 -0
- package/lib/extensions/__tests__/media-node-view.test.js +307 -0
- package/lib/extensions/__tests__/media.test.js +292 -0
- package/lib/extensions/__tests__/responseArea.test.js +736 -0
- package/lib/extensions/math.js +37 -19
- package/lib/extensions/math.js.map +1 -1
- package/lib/styles/editorContainerStyles.js +2 -2
- package/lib/styles/editorContainerStyles.js.map +1 -1
- package/lib/utils/__tests__/helper.test.js +107 -0
- package/lib/utils/__tests__/toolbar.test.js +38 -0
- package/package.json +9 -9
- package/src/__tests__/EditableHtml.test.jsx +0 -80
- package/src/components/EditableHtml.jsx +0 -52
- package/src/components/MenuBar.jsx +9 -91
- package/src/components/TiptapContainer.jsx +2 -2
- package/src/components/__tests__/MenuBar.test.jsx +9 -97
- package/src/components/__tests__/toolbar-buttons.test.jsx +2 -15
- package/src/components/common/toolbar-buttons.jsx +4 -6
- package/src/components/icons/TableIcons.jsx +1 -9
- package/src/components/icons/TextAlign.jsx +5 -39
- package/src/components/respArea/MathTemplated.jsx +6 -13
- package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
- package/src/extensions/__tests__/math.test.js +11 -9
- package/src/extensions/math.js +19 -11
- package/src/styles/editorContainerStyles.js +2 -2
- package/LICENSE.md +0 -5
- package/src/__tests__/editor-attributes.test.jsx +0 -77
- package/src/__tests__/spellcheck.test.jsx +0 -63
package/lib/extensions/math.js
CHANGED
|
@@ -13,6 +13,7 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
13
13
|
var _core = require("@tiptap/core");
|
|
14
14
|
var _react2 = require("@tiptap/react");
|
|
15
15
|
var _prosemirrorState = require("prosemirror-state");
|
|
16
|
+
var _styles = require("@mui/material/styles");
|
|
16
17
|
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
17
18
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
18
19
|
var _toolbar = require("../utils/toolbar");
|
|
@@ -120,6 +121,25 @@ var ZeroWidthSpaceHandlingPlugin = exports.ZeroWidthSpaceHandlingPlugin = new _p
|
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
});
|
|
124
|
+
var StyledMathNodeWrapper = (0, _styles.styled)(_react2.NodeViewWrapper, {
|
|
125
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
126
|
+
return prop !== 'selected';
|
|
127
|
+
}
|
|
128
|
+
})(function (_ref) {
|
|
129
|
+
var theme = _ref.theme,
|
|
130
|
+
selected = _ref.selected;
|
|
131
|
+
return _objectSpread({
|
|
132
|
+
display: 'inline-flex',
|
|
133
|
+
cursor: 'pointer',
|
|
134
|
+
margin: '0 4px',
|
|
135
|
+
'&:not(:has(.ML__latex))': {
|
|
136
|
+
border: 'solid 1px lightgrey',
|
|
137
|
+
padding: '5px'
|
|
138
|
+
}
|
|
139
|
+
}, selected && {
|
|
140
|
+
border: "solid 1px ".concat(theme.palette.primary.main)
|
|
141
|
+
});
|
|
142
|
+
});
|
|
123
143
|
var MathNode = exports.MathNode = _core.Node.create({
|
|
124
144
|
name: 'math',
|
|
125
145
|
group: 'inline',
|
|
@@ -163,11 +183,11 @@ var MathNode = exports.MathNode = _core.Node.create({
|
|
|
163
183
|
return {
|
|
164
184
|
insertMath: function insertMath() {
|
|
165
185
|
var latex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
166
|
-
return function (
|
|
186
|
+
return function (_ref2) {
|
|
167
187
|
var _node$type;
|
|
168
|
-
var tr =
|
|
169
|
-
editor =
|
|
170
|
-
dispatch =
|
|
188
|
+
var tr = _ref2.tr,
|
|
189
|
+
editor = _ref2.editor,
|
|
190
|
+
dispatch = _ref2.dispatch;
|
|
171
191
|
var state = editor.view.state;
|
|
172
192
|
var node = state.schema.nodes.math.create({
|
|
173
193
|
latex: latex
|
|
@@ -191,8 +211,8 @@ var MathNode = exports.MathNode = _core.Node.create({
|
|
|
191
211
|
}
|
|
192
212
|
};
|
|
193
213
|
},
|
|
194
|
-
renderHTML: function renderHTML(
|
|
195
|
-
var HTMLAttributes =
|
|
214
|
+
renderHTML: function renderHTML(_ref3) {
|
|
215
|
+
var HTMLAttributes = _ref3.HTMLAttributes;
|
|
196
216
|
if (HTMLAttributes.html) {
|
|
197
217
|
return ['span', {
|
|
198
218
|
'data-type': 'mathml',
|
|
@@ -236,9 +256,9 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
|
|
|
236
256
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
237
257
|
position = _useState4[0],
|
|
238
258
|
setPosition = _useState4[1];
|
|
239
|
-
var
|
|
240
|
-
|
|
241
|
-
mathOptions =
|
|
259
|
+
var _ref4 = options || {},
|
|
260
|
+
_ref4$math = _ref4.math,
|
|
261
|
+
mathOptions = _ref4$math === void 0 ? {} : _ref4$math;
|
|
242
262
|
var keypadMode = mathOptions.keypadMode,
|
|
243
263
|
_mathOptions$controll = mathOptions.controlledKeypadMode,
|
|
244
264
|
controlledKeypadMode = _mathOptions$controll === void 0 ? true : _mathOptions$controll,
|
|
@@ -265,9 +285,9 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
|
|
|
265
285
|
// open (see handleClickOutside): leave the cursor where the user
|
|
266
286
|
// actually clicked instead of overriding it.
|
|
267
287
|
var handleDone = function handleDone(newLatex) {
|
|
268
|
-
var
|
|
269
|
-
|
|
270
|
-
moveCursorAfterNode =
|
|
288
|
+
var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
289
|
+
_ref5$moveCursorAfter = _ref5.moveCursorAfterNode,
|
|
290
|
+
moveCursorAfterNode = _ref5$moveCursorAfter === void 0 ? true : _ref5$moveCursorAfter;
|
|
271
291
|
updateAttributes({
|
|
272
292
|
latex: newLatex
|
|
273
293
|
});
|
|
@@ -409,13 +429,9 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
|
|
|
409
429
|
return document.removeEventListener('click', handleClickOutside);
|
|
410
430
|
};
|
|
411
431
|
}, [editor, showToolbar, node]);
|
|
412
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
432
|
+
return /*#__PURE__*/_react["default"].createElement(StyledMathNodeWrapper, {
|
|
413
433
|
className: "math-node-".concat(timestamp.current),
|
|
414
|
-
|
|
415
|
-
display: 'inline-flex',
|
|
416
|
-
cursor: 'pointer',
|
|
417
|
-
margin: '0 4px'
|
|
418
|
-
},
|
|
434
|
+
selected: selected,
|
|
419
435
|
"data-selected": selected
|
|
420
436
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
421
437
|
ref: nodeRef,
|
|
@@ -424,7 +440,9 @@ var MathNodeView = exports.MathNodeView = function MathNodeView(props) {
|
|
|
424
440
|
},
|
|
425
441
|
contentEditable: false
|
|
426
442
|
}, /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, {
|
|
427
|
-
latex: latex
|
|
443
|
+
latex: latex,
|
|
444
|
+
isSelected: selected,
|
|
445
|
+
outlineOnWrapper: true
|
|
428
446
|
})), showToolbar && /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
|
|
429
447
|
ref: toolbarRef,
|
|
430
448
|
"data-toolbar-for": editor.instanceId,
|
|
@@ -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","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":[]}
|
|
1
|
+
{"version":3,"file":"math.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_core","_react2","_prosemirrorState","_styles","_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","StyledMathNodeWrapper","styled","NodeViewWrapper","shouldForwardProp","prop","_ref","theme","selected","display","cursor","margin","border","padding","concat","palette","primary","main","MathNode","Node","group","inline","atom","addAttributes","wrapper","html","addProseMirrorPlugins","parseHTML","tag","getAttrs","el","getAttribute","innerHTML","addCommands","_this","insertMath","_ref2","_node$type","editor","nodes","math","$from","sel","setToolbarOpened","renderHTML","_ref3","HTMLAttributes","dangerouslySetInnerHTML","__html","wrapMath","addNodeView","_this2","ReactNodeViewRenderer","createElement","MathNodeView","options","updateAttributes","getPos","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","toolbarRef","useRef","nodeRef","timestamp","Date","now","_useState3","top","left","_useState4","position","setPosition","_ref4","_ref4$math","mathOptions","keypadMode","_mathOptions$controll","controlledKeypadMode","_mathOptions$customKe","customKeys","keyPadCharacterRef","setKeypadInteraction","attrs","handleChange","newLatex","handleDone","_ref5","_ref5$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","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","contains","_editor$view","clickedInsideEditableContent","dom","className","ref","onClick","contentEditable","MathPreview","isSelected","outlineOnWrapper","ReactDOM","createPortal","instanceId","style","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 { styled } from '@mui/material/styles';\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\nconst StyledMathNodeWrapper = styled(NodeViewWrapper, {\n shouldForwardProp: (prop) => prop !== 'selected',\n})(({ theme, selected }) => ({\n display: 'inline-flex',\n cursor: 'pointer',\n margin: '0 4px',\n '&:not(:has(.ML__latex))': {\n border: 'solid 1px lightgrey',\n padding: '5px',\n },\n ...(selected && {\n border: `solid 1px ${theme.palette.primary.main}`,\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 <StyledMathNodeWrapper className={`math-node-${timestamp.current}`} selected={selected} data-selected={selected}>\n <div ref={nodeRef} onClick={() => setShowToolbar(true)} contentEditable={false}>\n <MathPreview latex={latex} isSelected={selected} outlineOnWrapper />\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 </StyledMathNodeWrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -92,14 +92,14 @@ var styles = function styles(theme) {
|
|
|
92
92
|
backgroundColor: _renderUi.color.background()
|
|
93
93
|
},
|
|
94
94
|
'& table:not([border="1"]) tr': {
|
|
95
|
-
borderTop:
|
|
95
|
+
borderTop: '1px solid #dfe2e5'
|
|
96
96
|
},
|
|
97
97
|
'& td, th': {
|
|
98
98
|
padding: '.6em 1em',
|
|
99
99
|
textAlign: 'center'
|
|
100
100
|
},
|
|
101
101
|
'& table:not([border="1"]) td, th': {
|
|
102
|
-
border:
|
|
102
|
+
border: '1px solid #dfe2e5'
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
children: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorContainerStyles.js","names":["_renderUi","require","styles","theme","root","position","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","marginTop","margin","marginBottom","lineHeight","textWrap","fontSize","backgroundColor","color","background","fontFamily","borderLeft","borderTop","tableLayout","width","borderCollapse","text","
|
|
1
|
+
{"version":3,"file":"editorContainerStyles.js","names":["_renderUi","require","styles","theme","root","position","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","marginTop","margin","marginBottom","lineHeight","textWrap","fontSize","backgroundColor","color","background","fontFamily","borderLeft","borderTop","tableLayout","width","borderCollapse","text","textAlign","children","editorHolder","overflowY","disabledScrollbar","display","scrollbarWidth","error","concat","palette","main","noBorder","noPadding","toolbarOnTop","_default","exports"],"sources":["../../src/styles/editorContainerStyles.js"],"sourcesContent":["import { color } from '@pie-lib/render-ui';\n\nconst styles = (theme) => ({\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n // needed in order to be able to put the focus before a void element when it is the first one in the editor\n padding: '5px',\n },\n\n '&:first-child': {\n marginTop: 0,\n },\n\n '& ul, & ol': {\n padding: '0 1rem',\n margin: '1.25rem 1rem 1.25rem 0.4rem',\n },\n\n '& ul li p, & ol li p': {\n marginTop: '0.25em',\n marginBottom: '0.25em',\n },\n\n '& h1, & h2, & h3, & h4, & h5, & h6': {\n lineHeight: 1.1,\n marginTop: '2.5rem',\n textWrap: 'pretty',\n },\n\n '& h1, & h2': {\n marginTop: '3.5rem',\n marginBottom: '1.5rem',\n },\n\n '& h1': {\n fontSize: '1.4rem',\n },\n\n '& h2': {\n fontSize: '1.2rem',\n },\n\n '& h3': {\n fontSize: '1.1rem',\n },\n\n '& h4, & h5, & h6': {\n fontSize: '1rem',\n },\n\n '& code': {\n backgroundColor: 'var(--purple-light)',\n borderRadius: '0.4rem',\n color: 'var(--black)',\n fontSize: '0.85rem',\n padding: '0.25em 0.3em',\n },\n\n '& pre': {\n background: 'var(--black)',\n borderRadius: '0.5rem',\n color: 'var(--white)',\n fontFamily: '\\'JetBrainsMono\\', monospace',\n margin: '1.5rem 0',\n padding: '0.75rem 1rem',\n\n '& code': {\n background: 'none',\n color: 'inherit',\n fontSize: '0.8rem',\n padding: 0,\n },\n },\n\n '& blockquote': {\n background: '#f9f9f9',\n borderLeft: '5px solid #ccc',\n margin: '1.5em 10px',\n padding: '.5em 10px',\n },\n\n '& hr': {\n border: 'none',\n borderTop: '1px solid var(--gray-2)',\n margin: '2rem 0',\n },\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n },\n children: {\n padding: '10px 16px',\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'auto',\n color: color.text(),\n backgroundColor: color.background(),\n },\n disabledScrollbar: {\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n scrollbarWidth: 'none',\n '-ms-overflow-style': 'none',\n },\n error: {\n border: `2px solid ${theme.palette.error.main} !important`,\n },\n noBorder: {\n border: 'none',\n },\n noPadding: {\n padding: 0,\n },\n toolbarOnTop: {\n marginTop: '45px',\n },\n});\n\nexport default styles;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _helper = require("../helper");
|
|
4
|
+
describe('normalizeInitialMarkup', function () {
|
|
5
|
+
describe('basic normalization', function () {
|
|
6
|
+
it('returns empty div for empty string', function () {
|
|
7
|
+
expect((0, _helper.normalizeInitialMarkup)('')).toBe('<div></div>');
|
|
8
|
+
});
|
|
9
|
+
it('returns empty div for null', function () {
|
|
10
|
+
expect((0, _helper.normalizeInitialMarkup)(null)).toBe('<div></div>');
|
|
11
|
+
});
|
|
12
|
+
it('returns empty div for undefined', function () {
|
|
13
|
+
expect((0, _helper.normalizeInitialMarkup)(undefined)).toBe('<div></div>');
|
|
14
|
+
});
|
|
15
|
+
it('wraps plain text in div', function () {
|
|
16
|
+
expect((0, _helper.normalizeInitialMarkup)('Hello')).toBe('<div>Hello</div>');
|
|
17
|
+
});
|
|
18
|
+
it('returns HTML tags as-is when detected as HTML', function () {
|
|
19
|
+
// Since '<script>' matches the HTML pattern, it's returned as-is
|
|
20
|
+
// To be escaped, it would need to not match the HTML pattern
|
|
21
|
+
expect((0, _helper.normalizeInitialMarkup)('<script>')).toBe('<script>');
|
|
22
|
+
});
|
|
23
|
+
it('escapes HTML entities in plain text', function () {
|
|
24
|
+
// Plain text without angle brackets gets escaped
|
|
25
|
+
expect((0, _helper.normalizeInitialMarkup)('Hello & World')).toBe('<div>Hello & World</div>');
|
|
26
|
+
});
|
|
27
|
+
it('returns single div as-is', function () {
|
|
28
|
+
var html = '<div>Hello</div>';
|
|
29
|
+
expect((0, _helper.normalizeInitialMarkup)(html)).toBe(html);
|
|
30
|
+
});
|
|
31
|
+
it('returns paragraph as-is', function () {
|
|
32
|
+
var html = '<p>Hello</p>';
|
|
33
|
+
expect((0, _helper.normalizeInitialMarkup)(html)).toBe(html);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('consecutive divs to paragraph conversion', function () {
|
|
37
|
+
it('converts two consecutive divs to paragraph with br', function () {
|
|
38
|
+
var input = '<div>A</div><div>B</div>';
|
|
39
|
+
var expected = '<p>A<br>B</p>';
|
|
40
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
41
|
+
});
|
|
42
|
+
it('converts three consecutive divs to paragraph with br tags', function () {
|
|
43
|
+
var input = '<div>A</div><div>B</div><div>C</div>';
|
|
44
|
+
var expected = '<p>A<br>B<br>C</p>';
|
|
45
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
46
|
+
});
|
|
47
|
+
it('handles divs with whitespace', function () {
|
|
48
|
+
var input = '<div> A </div><div> B </div>';
|
|
49
|
+
var expected = '<p> A <br> B </p>';
|
|
50
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
51
|
+
});
|
|
52
|
+
it('handles divs with inline elements', function () {
|
|
53
|
+
var input = '<div><strong>A</strong></div><div><em>B</em></div>';
|
|
54
|
+
var expected = '<p><strong>A</strong><br><em>B</em></p>';
|
|
55
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
56
|
+
});
|
|
57
|
+
it('handles empty divs', function () {
|
|
58
|
+
var input = '<div></div><div>B</div>';
|
|
59
|
+
var expected = '<p><br>B</p>';
|
|
60
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
61
|
+
});
|
|
62
|
+
it('preserves existing br tags within divs', function () {
|
|
63
|
+
var input = '<div>A<br>A2</div><div>B</div>';
|
|
64
|
+
var expected = '<p>A<br>A2<br>B</p>';
|
|
65
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('cases that should NOT convert', function () {
|
|
69
|
+
it('does not convert single div', function () {
|
|
70
|
+
var input = '<div>Hello</div>';
|
|
71
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
72
|
+
});
|
|
73
|
+
it('does not convert divs with nested block elements', function () {
|
|
74
|
+
var input = '<div><div>Nested</div></div><div>B</div>';
|
|
75
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
76
|
+
});
|
|
77
|
+
it('does not convert divs containing tables', function () {
|
|
78
|
+
var input = '<div><table><tr><td>A</td></tr></table></div><div>B</div>';
|
|
79
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
80
|
+
});
|
|
81
|
+
it('does not convert divs containing lists', function () {
|
|
82
|
+
var input = '<div><ul><li>Item</li></ul></div><div>B</div>';
|
|
83
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
84
|
+
});
|
|
85
|
+
it('does not convert mixed element types', function () {
|
|
86
|
+
var input = '<div>A</div><p>B</p>';
|
|
87
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
88
|
+
});
|
|
89
|
+
it('does not convert paragraphs', function () {
|
|
90
|
+
var input = '<p>A</p><p>B</p>';
|
|
91
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('edge cases', function () {
|
|
95
|
+
it('handles divs with attributes', function () {
|
|
96
|
+
var input = '<div class="test">A</div><div>B</div>';
|
|
97
|
+
// Should not convert since we only want simple divs
|
|
98
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(input);
|
|
99
|
+
});
|
|
100
|
+
it('handles complex inline formatting', function () {
|
|
101
|
+
var input = '<div><strong><em>A</em></strong></div><div><u>B</u></div>';
|
|
102
|
+
var expected = '<p><strong><em>A</em></strong><br><u>B</u></p>';
|
|
103
|
+
expect((0, _helper.normalizeInitialMarkup)(input)).toBe(expected);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVyIiwicmVxdWlyZSIsImRlc2NyaWJlIiwiaXQiLCJleHBlY3QiLCJub3JtYWxpemVJbml0aWFsTWFya3VwIiwidG9CZSIsInVuZGVmaW5lZCIsImh0bWwiLCJpbnB1dCIsImV4cGVjdGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL19fdGVzdHNfXy9oZWxwZXIudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVJbml0aWFsTWFya3VwIH0gZnJvbSAnLi4vaGVscGVyJztcblxuZGVzY3JpYmUoJ25vcm1hbGl6ZUluaXRpYWxNYXJrdXAnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdiYXNpYyBub3JtYWxpemF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGRpdiBmb3IgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoJycpKS50b0JlKCc8ZGl2PjwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgZGl2IGZvciBudWxsJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAobnVsbCkpLnRvQmUoJzxkaXY+PC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBlbXB0eSBkaXYgZm9yIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKHVuZGVmaW5lZCkpLnRvQmUoJzxkaXY+PC9kaXY+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnd3JhcHMgcGxhaW4gdGV4dCBpbiBkaXYnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cCgnSGVsbG8nKSkudG9CZSgnPGRpdj5IZWxsbzwvZGl2PicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgSFRNTCB0YWdzIGFzLWlzIHdoZW4gZGV0ZWN0ZWQgYXMgSFRNTCcsICgpID0+IHtcbiAgICAgIC8vIFNpbmNlICc8c2NyaXB0PicgbWF0Y2hlcyB0aGUgSFRNTCBwYXR0ZXJuLCBpdCdzIHJldHVybmVkIGFzLWlzXG4gICAgICAvLyBUbyBiZSBlc2NhcGVkLCBpdCB3b3VsZCBuZWVkIHRvIG5vdCBtYXRjaCB0aGUgSFRNTCBwYXR0ZXJuXG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cCgnPHNjcmlwdD4nKSkudG9CZSgnPHNjcmlwdD4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdlc2NhcGVzIEhUTUwgZW50aXRpZXMgaW4gcGxhaW4gdGV4dCcsICgpID0+IHtcbiAgICAgIC8vIFBsYWluIHRleHQgd2l0aG91dCBhbmdsZSBicmFja2V0cyBnZXRzIGVzY2FwZWRcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKCdIZWxsbyAmIFdvcmxkJykpLnRvQmUoJzxkaXY+SGVsbG8gJmFtcDsgV29ybGQ8L2Rpdj4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNpbmdsZSBkaXYgYXMtaXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gJzxkaXY+SGVsbG88L2Rpdj4nO1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoaHRtbCkpLnRvQmUoaHRtbCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBwYXJhZ3JhcGggYXMtaXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gJzxwPkhlbGxvPC9wPic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChodG1sKSkudG9CZShodG1sKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbnNlY3V0aXZlIGRpdnMgdG8gcGFyYWdyYXBoIGNvbnZlcnNpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NvbnZlcnRzIHR3byBjb25zZWN1dGl2ZSBkaXZzIHRvIHBhcmFncmFwaCB3aXRoIGJyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj5BPC9kaXY+PGRpdj5CPC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPkE8YnI+QjwvcD4nO1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoaW5wdXQpKS50b0JlKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb252ZXJ0cyB0aHJlZSBjb25zZWN1dGl2ZSBkaXZzIHRvIHBhcmFncmFwaCB3aXRoIGJyIHRhZ3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICc8ZGl2PkE8L2Rpdj48ZGl2PkI8L2Rpdj48ZGl2PkM8L2Rpdj4nO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSAnPHA+QTxicj5CPGJyPkM8L3A+JztcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKGlucHV0KSkudG9CZShleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBkaXZzIHdpdGggd2hpdGVzcGFjZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJzxkaXY+ICBBICA8L2Rpdj48ZGl2PiAgQiAgPC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPiAgQSAgPGJyPiAgQiAgPC9wPic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChpbnB1dCkpLnRvQmUoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgZGl2cyB3aXRoIGlubGluZSBlbGVtZW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJzxkaXY+PHN0cm9uZz5BPC9zdHJvbmc+PC9kaXY+PGRpdj48ZW0+QjwvZW0+PC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPjxzdHJvbmc+QTwvc3Ryb25nPjxicj48ZW0+QjwvZW0+PC9wPic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChpbnB1dCkpLnRvQmUoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgZW1wdHkgZGl2cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJzxkaXY+PC9kaXY+PGRpdj5CPC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPjxicj5CPC9wPic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChpbnB1dCkpLnRvQmUoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZXNlcnZlcyBleGlzdGluZyBiciB0YWdzIHdpdGhpbiBkaXZzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj5BPGJyPkEyPC9kaXY+PGRpdj5CPC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPkE8YnI+QTI8YnI+QjwvcD4nO1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoaW5wdXQpKS50b0JlKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Nhc2VzIHRoYXQgc2hvdWxkIE5PVCBjb252ZXJ0JywgKCkgPT4ge1xuICAgIGl0KCdkb2VzIG5vdCBjb252ZXJ0IHNpbmdsZSBkaXYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICc8ZGl2PkhlbGxvPC9kaXY+JztcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKGlucHV0KSkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY29udmVydCBkaXZzIHdpdGggbmVzdGVkIGJsb2NrIGVsZW1lbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj48ZGl2Pk5lc3RlZDwvZGl2PjwvZGl2PjxkaXY+QjwvZGl2Pic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChpbnB1dCkpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGNvbnZlcnQgZGl2cyBjb250YWluaW5nIHRhYmxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJzxkaXY+PHRhYmxlPjx0cj48dGQ+QTwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjxkaXY+QjwvZGl2Pic7XG4gICAgICBleHBlY3Qobm9ybWFsaXplSW5pdGlhbE1hcmt1cChpbnB1dCkpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGNvbnZlcnQgZGl2cyBjb250YWluaW5nIGxpc3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj48dWw+PGxpPkl0ZW08L2xpPjwvdWw+PC9kaXY+PGRpdj5CPC9kaXY+JztcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKGlucHV0KSkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY29udmVydCBtaXhlZCBlbGVtZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj5BPC9kaXY+PHA+QjwvcD4nO1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoaW5wdXQpKS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjb252ZXJ0IHBhcmFncmFwaHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICc8cD5BPC9wPjxwPkI8L3A+JztcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKGlucHV0KSkudG9CZShpbnB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIGRpdnMgd2l0aCBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdiBjbGFzcz1cInRlc3RcIj5BPC9kaXY+PGRpdj5CPC9kaXY+JztcbiAgICAgIC8vIFNob3VsZCBub3QgY29udmVydCBzaW5jZSB3ZSBvbmx5IHdhbnQgc2ltcGxlIGRpdnNcbiAgICAgIGV4cGVjdChub3JtYWxpemVJbml0aWFsTWFya3VwKGlucHV0KSkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBjb21wbGV4IGlubGluZSBmb3JtYXR0aW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnPGRpdj48c3Ryb25nPjxlbT5BPC9lbT48L3N0cm9uZz48L2Rpdj48ZGl2Pjx1PkI8L3U+PC9kaXY+JztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJzxwPjxzdHJvbmc+PGVtPkE8L2VtPjwvc3Ryb25nPjxicj48dT5CPC91PjwvcD4nO1xuICAgICAgZXhwZWN0KG5vcm1hbGl6ZUluaXRpYWxNYXJrdXAoaW5wdXQpKS50b0JlKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLFlBQU07RUFDdkNBLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxZQUFNO0lBQ3BDQyxFQUFFLENBQUMsb0NBQW9DLEVBQUUsWUFBTTtNQUM3Q0MsTUFBTSxDQUFDLElBQUFDLDhCQUFzQixFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0lBRUZILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxZQUFNO01BQ3JDQyxNQUFNLENBQUMsSUFBQUMsOEJBQXNCLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMxRCxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLFlBQU07TUFDMUNDLE1BQU0sQ0FBQyxJQUFBQyw4QkFBc0IsRUFBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMvRCxDQUFDLENBQUM7SUFFRkgsRUFBRSxDQUFDLHlCQUF5QixFQUFFLFlBQU07TUFDbEND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
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _toolbar = require("../toolbar");
|
|
4
|
+
describe('setToolbarOpened', function () {
|
|
5
|
+
var createEditor = function createEditor() {
|
|
6
|
+
var toolbarOpened = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
7
|
+
var tr = {
|
|
8
|
+
setMeta: jest.fn().mockReturnThis()
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
_toolbarOpened: toolbarOpened,
|
|
12
|
+
state: {
|
|
13
|
+
tr: tr
|
|
14
|
+
},
|
|
15
|
+
view: {
|
|
16
|
+
dispatch: jest.fn()
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
it('sets editor._toolbarOpened and dispatches a meta transaction', function () {
|
|
21
|
+
var editor = createEditor(false);
|
|
22
|
+
(0, _toolbar.setToolbarOpened)(editor, true);
|
|
23
|
+
expect(editor._toolbarOpened).toBe(true);
|
|
24
|
+
expect(editor.state.tr.setMeta).toHaveBeenCalledWith(_toolbar.TOOLBAR_OPENED_META_KEY, true);
|
|
25
|
+
expect(editor.view.dispatch).toHaveBeenCalledWith(editor.state.tr);
|
|
26
|
+
});
|
|
27
|
+
it('does nothing when the value is unchanged', function () {
|
|
28
|
+
var editor = createEditor(true);
|
|
29
|
+
(0, _toolbar.setToolbarOpened)(editor, true);
|
|
30
|
+
expect(editor.view.dispatch).not.toHaveBeenCalled();
|
|
31
|
+
});
|
|
32
|
+
it('coerces the opened value to a boolean', function () {
|
|
33
|
+
var editor = createEditor(false);
|
|
34
|
+
(0, _toolbar.setToolbarOpened)(editor, 1);
|
|
35
|
+
expect(editor._toolbarOpened).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9vbGJhciIsInJlcXVpcmUiLCJkZXNjcmliZSIsImNyZWF0ZUVkaXRvciIsInRvb2xiYXJPcGVuZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ0ciIsInNldE1ldGEiLCJqZXN0IiwiZm4iLCJtb2NrUmV0dXJuVGhpcyIsIl90b29sYmFyT3BlbmVkIiwic3RhdGUiLCJ2aWV3IiwiZGlzcGF0Y2giLCJpdCIsImVkaXRvciIsInNldFRvb2xiYXJPcGVuZWQiLCJleHBlY3QiLCJ0b0JlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJUT09MQkFSX09QRU5FRF9NRVRBX0tFWSIsIm5vdCIsInRvSGF2ZUJlZW5DYWxsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvX190ZXN0c19fL3Rvb2xiYXIudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXRUb29sYmFyT3BlbmVkLCBUT09MQkFSX09QRU5FRF9NRVRBX0tFWSB9IGZyb20gJy4uL3Rvb2xiYXInO1xuXG5kZXNjcmliZSgnc2V0VG9vbGJhck9wZW5lZCcsICgpID0+IHtcbiAgY29uc3QgY3JlYXRlRWRpdG9yID0gKHRvb2xiYXJPcGVuZWQgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHRyID0ge1xuICAgICAgc2V0TWV0YTogamVzdC5mbigpLm1vY2tSZXR1cm5UaGlzKCksXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBfdG9vbGJhck9wZW5lZDogdG9vbGJhck9wZW5lZCxcbiAgICAgIHN0YXRlOiB7IHRyIH0sXG4gICAgICB2aWV3OiB7XG4gICAgICAgIGRpc3BhdGNoOiBqZXN0LmZuKCksXG4gICAgICB9LFxuICAgIH07XG4gIH07XG5cbiAgaXQoJ3NldHMgZWRpdG9yLl90b29sYmFyT3BlbmVkIGFuZCBkaXNwYXRjaGVzIGEgbWV0YSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVFZGl0b3IoZmFsc2UpO1xuXG4gICAgc2V0VG9vbGJhck9wZW5lZChlZGl0b3IsIHRydWUpO1xuXG4gICAgZXhwZWN0KGVkaXRvci5fdG9vbGJhck9wZW5lZCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoZWRpdG9yLnN0YXRlLnRyLnNldE1ldGEpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFRPT0xCQVJfT1BFTkVEX01FVEFfS0VZLCB0cnVlKTtcbiAgICBleHBlY3QoZWRpdG9yLnZpZXcuZGlzcGF0Y2gpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGVkaXRvci5zdGF0ZS50cik7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdGhpbmcgd2hlbiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZUVkaXRvcih0cnVlKTtcblxuICAgIHNldFRvb2xiYXJPcGVuZWQoZWRpdG9yLCB0cnVlKTtcblxuICAgIGV4cGVjdChlZGl0b3Iudmlldy5kaXNwYXRjaCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ2NvZXJjZXMgdGhlIG9wZW5lZCB2YWx1ZSB0byBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgY29uc3QgZWRpdG9yID0gY3JlYXRlRWRpdG9yKGZhbHNlKTtcblxuICAgIHNldFRvb2xiYXJPcGVuZWQoZWRpdG9yLCAxKTtcblxuICAgIGV4cGVjdChlZGl0b3IuX3Rvb2xiYXJPcGVuZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxZQUFNO0VBQ2pDLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFBLEVBQThCO0lBQUEsSUFBMUJDLGFBQWEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztJQUN6QyxJQUFNRyxFQUFFLEdBQUc7TUFDVEMsT0FBTyxFQUFFQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTztNQUNMQyxjQUFjLEVBQUVULGFBQWE7TUFDN0JVLEtBQUssRUFBRTtRQUFFTixFQUFFLEVBQUZBO01BQUcsQ0FBQztNQUNiTyxJQUFJLEVBQUU7UUFDSkMsUUFBUSxFQUFFTixJQUFJLENBQUNDLEVBQUUsQ0FBQztNQUNwQjtJQUNGLENBQUM7RUFDSCxDQUFDO0VBRURNLEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxZQUFNO0lBQ3ZFLElBQU1DLE1BQU0sR0FBR2YsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUVsQyxJQUFBZ0IseUJBQWdCLEVBQUNELE1BQU0sRUFBRSxJQUFJLENBQUM7SUFFOUJFLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDTCxjQUFjLENBQUMsQ0FBQ1EsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4Q0QsTUFBTSxDQUFDRixNQUFNLENBQUNKLEtBQUssQ0FBQ04sRUFBRSxDQUFDQyxPQUFPLENBQUMsQ0FBQ2Esb0JBQW9CLENBQUNDLGdDQUF1QixFQUFFLElBQUksQ0FBQztJQUNuRkgsTUFBTSxDQUFDRixNQUFNLENBQUNILElBQUksQ0FBQ0MsUUFBUSxDQUFDLENBQUNNLG9CQUFvQixDQUFDSixNQUFNLENBQUNKLEtBQUssQ0FBQ04sRUFBRSxDQUFDO0VBQ3BFLENBQUMsQ0FBQztFQUVGUyxFQUFFLENBQUMsMENBQTBDLEVBQUUsWUFBTTtJQUNuRCxJQUFNQyxNQUFNLEdBQUdmLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFFakMsSUFBQWdCLHlCQUFnQixFQUFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBRTlCRSxNQUFNLENBQUNGLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQ1EsR0FBRyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3JELENBQUMsQ0FBQztFQUVGUixFQUFFLENBQUMsdUNBQXVDLEVBQUUsWUFBTTtJQUNoRCxJQUFNQyxNQUFNLEdBQUdmLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFFbEMsSUFBQWdCLHlCQUFnQixFQUFDRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTNCRSxNQUFNLENBQUNGLE1BQU0sQ0FBQ0wsY0FBYyxDQUFDLENBQUNRLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.1.
|
|
6
|
+
"version": "2.1.20-beta.10",
|
|
7
7
|
"description": "",
|
|
8
8
|
"license": "ISC",
|
|
9
9
|
"main": "lib/index.js",
|
|
@@ -16,11 +16,11 @@
|
|
|
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": "^4.
|
|
20
|
-
"@pie-lib/math-input": "^
|
|
21
|
-
"@pie-lib/math-rendering": "^5.
|
|
22
|
-
"@pie-lib/math-toolbar": "^3.0.10",
|
|
23
|
-
"@pie-lib/render-ui": "^
|
|
19
|
+
"@pie-lib/drag": "^4.0.2",
|
|
20
|
+
"@pie-lib/math-input-mathlive": "^1.1.5-beta.10",
|
|
21
|
+
"@pie-lib/math-rendering": "^5.0.2",
|
|
22
|
+
"@pie-lib/math-toolbar": "^3.0.11-beta.10",
|
|
23
|
+
"@pie-lib/render-ui": "^6.1.0",
|
|
24
24
|
"@tiptap/core": "3.20.0",
|
|
25
25
|
"@tiptap/extension-character-count": "3.20.0",
|
|
26
26
|
"@tiptap/extension-color": "3.20.0",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"@tiptap/extension-table": "3.20.0",
|
|
33
33
|
"@tiptap/extension-table-cell": "3.20.0",
|
|
34
34
|
"@tiptap/extension-table-header": "3.20.0",
|
|
35
|
-
"@tiptap/extension-table-row": "3.
|
|
35
|
+
"@tiptap/extension-table-row": "3.20.0",
|
|
36
36
|
"@tiptap/extension-text-align": "3.20.0",
|
|
37
37
|
"@tiptap/extension-text-style": "3.20.0",
|
|
38
|
-
"@tiptap/pm": "3.
|
|
38
|
+
"@tiptap/pm": "3.20.0",
|
|
39
39
|
"@tiptap/react": "3.20.0",
|
|
40
40
|
"@tiptap/starter-kit": "3.20.0",
|
|
41
41
|
"change-case": "^3.0.2",
|
|
@@ -59,6 +59,6 @@
|
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"react": "^18.2.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "433bcb776c2975739e7417f133d31cd996164116",
|
|
63
63
|
"scripts": {}
|
|
64
64
|
}
|