@pie-lib/editable-html-tip-tap 1.2.0-next.8 → 2.0.0

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.
Files changed (98) hide show
  1. package/CHANGELOG.md +178 -0
  2. package/lib/components/CharacterPicker.js +1 -0
  3. package/lib/components/CharacterPicker.js.map +1 -1
  4. package/lib/components/EditableHtml.js +84 -43
  5. package/lib/components/EditableHtml.js.map +1 -1
  6. package/lib/components/MenuBar.js +74 -43
  7. package/lib/components/MenuBar.js.map +1 -1
  8. package/lib/components/TiptapContainer.js +9 -8
  9. package/lib/components/TiptapContainer.js.map +1 -1
  10. package/lib/components/icons/TextAlign.js +2 -2
  11. package/lib/components/icons/TextAlign.js.map +1 -1
  12. package/lib/components/image/InsertImageHandler.js +10 -13
  13. package/lib/components/image/InsertImageHandler.js.map +1 -1
  14. package/lib/components/media/MediaDialog.js.map +1 -1
  15. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +6 -1
  16. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +1 -1
  17. package/lib/components/respArea/DragInTheBlank/choice.js +15 -7
  18. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
  19. package/lib/components/respArea/ExplicitConstructedResponse.js +29 -11
  20. package/lib/components/respArea/ExplicitConstructedResponse.js.map +1 -1
  21. package/lib/components/respArea/InlineDropdown.js +35 -6
  22. package/lib/components/respArea/InlineDropdown.js.map +1 -1
  23. package/lib/components/respArea/MathTemplated.js +130 -0
  24. package/lib/components/respArea/MathTemplated.js.map +1 -0
  25. package/lib/extensions/custom-toolbar-wrapper.js +3 -2
  26. package/lib/extensions/custom-toolbar-wrapper.js.map +1 -1
  27. package/lib/extensions/div-node.js +83 -0
  28. package/lib/extensions/div-node.js.map +1 -0
  29. package/lib/extensions/ensure-empty-root-div.js +48 -0
  30. package/lib/extensions/ensure-empty-root-div.js.map +1 -0
  31. package/lib/extensions/ensure-list-item-content-is-div.js +64 -0
  32. package/lib/extensions/ensure-list-item-content-is-div.js.map +1 -0
  33. package/lib/extensions/extended-list-item.js +15 -0
  34. package/lib/extensions/extended-list-item.js.map +1 -0
  35. package/lib/extensions/extended-table-cell.js +22 -0
  36. package/lib/extensions/extended-table-cell.js.map +1 -0
  37. package/lib/extensions/extended-table.js +50 -1
  38. package/lib/extensions/extended-table.js.map +1 -1
  39. package/lib/extensions/image-component.js +102 -51
  40. package/lib/extensions/image-component.js.map +1 -1
  41. package/lib/extensions/image.js +51 -2
  42. package/lib/extensions/image.js.map +1 -1
  43. package/lib/extensions/math.js +50 -9
  44. package/lib/extensions/math.js.map +1 -1
  45. package/lib/extensions/media.js +3 -1
  46. package/lib/extensions/media.js.map +1 -1
  47. package/lib/extensions/responseArea.js +22 -13
  48. package/lib/extensions/responseArea.js.map +1 -1
  49. package/lib/styles/editorContainerStyles.js +5 -4
  50. package/lib/styles/editorContainerStyles.js.map +1 -1
  51. package/lib/utils/helper.js +17 -0
  52. package/lib/utils/helper.js.map +1 -0
  53. package/package.json +8 -8
  54. package/src/__tests__/EditableHtml.test.jsx +93 -7
  55. package/src/__tests__/index.test.jsx +11 -3
  56. package/src/components/CharacterPicker.jsx +1 -0
  57. package/src/components/EditableHtml.jsx +93 -41
  58. package/src/components/MenuBar.jsx +57 -24
  59. package/src/components/TiptapContainer.jsx +10 -8
  60. package/src/components/__tests__/CharacterPicker.test.jsx +22 -0
  61. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +55 -12
  62. package/src/components/__tests__/InlineDropdown.test.jsx +203 -10
  63. package/src/components/__tests__/InsertImageHandler.test.js +28 -21
  64. package/src/components/__tests__/MenuBar.test.jsx +32 -0
  65. package/src/components/icons/TextAlign.jsx +1 -1
  66. package/src/components/image/InsertImageHandler.js +9 -13
  67. package/src/components/respArea/DragInTheBlank/DragInTheBlank.jsx +6 -1
  68. package/src/components/respArea/DragInTheBlank/choice.jsx +32 -4
  69. package/src/components/respArea/ExplicitConstructedResponse.jsx +33 -10
  70. package/src/components/respArea/InlineDropdown.jsx +45 -10
  71. package/src/components/respArea/MathTemplated.jsx +124 -0
  72. package/src/components/respArea/__tests__/MathTemplated.test.jsx +210 -0
  73. package/src/extensions/__tests__/divNode.test.js +87 -0
  74. package/src/extensions/__tests__/ensure-empty-root-div.test.js +57 -0
  75. package/src/extensions/__tests__/ensure-list-item-content-is-div.test.js +44 -0
  76. package/src/extensions/__tests__/extended-list-item.test.js +13 -0
  77. package/src/extensions/__tests__/extended-table-cell.test.js +22 -0
  78. package/src/extensions/__tests__/extended-table.test.js +98 -1
  79. package/src/extensions/__tests__/image-component.test.jsx +105 -9
  80. package/src/extensions/__tests__/image.test.js +109 -8
  81. package/src/extensions/__tests__/math.test.js +348 -0
  82. package/src/extensions/__tests__/media-node-view.test.jsx +10 -8
  83. package/src/extensions/__tests__/responseArea.test.js +291 -0
  84. package/src/extensions/custom-toolbar-wrapper.jsx +2 -2
  85. package/src/extensions/div-node.js +86 -0
  86. package/src/extensions/ensure-empty-root-div.js +47 -0
  87. package/src/extensions/ensure-list-item-content-is-div.js +62 -0
  88. package/src/extensions/extended-list-item.js +10 -0
  89. package/src/extensions/extended-table-cell.js +19 -0
  90. package/src/extensions/extended-table.js +37 -1
  91. package/src/extensions/image-component.jsx +114 -69
  92. package/src/extensions/image.js +56 -1
  93. package/src/extensions/math.js +62 -10
  94. package/src/extensions/media.js +1 -1
  95. package/src/extensions/responseArea.js +15 -12
  96. package/src/styles/editorContainerStyles.js +5 -4
  97. package/src/utils/helper.js +17 -0
  98. /package/src/components/media/{MediaDialog.js → MediaDialog.jsx} +0 -0
@@ -12,6 +12,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _react2 = require("@tiptap/react");
13
13
  var _RespArea = require("../icons/RespArea");
14
14
  var _reactDom = _interopRequireDefault(require("react-dom"));
15
+ var _customToolbarWrapper = _interopRequireDefault(require("../../extensions/custom-toolbar-wrapper"));
15
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
17
  var InlineDropdown = function InlineDropdown(props) {
17
18
  var editor = props.editor,
@@ -25,7 +26,9 @@ var InlineDropdown = function InlineDropdown(props) {
25
26
  // TODO: Investigate
26
27
  // Needed because items with values inside have different positioning for some reason
27
28
  var html = value || '<div>&nbsp</div>';
29
+ var pos = getPos();
28
30
  var toolbarRef = (0, _react.useRef)(null);
31
+ var toolbarEditor = (0, _react.useRef)(null);
29
32
  var _useState = (0, _react.useState)(false),
30
33
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
31
34
  showToolbar = _useState2[0],
@@ -37,7 +40,7 @@ var InlineDropdown = function InlineDropdown(props) {
37
40
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
38
41
  position = _useState4[0],
39
42
  setPosition = _useState4[1];
40
- var InlineDropdownToolbar = options.respAreaToolbar(node, editor, function () {});
43
+ var InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, function () {});
41
44
  (0, _react.useEffect)(function () {
42
45
  var selection = editor.state.selection;
43
46
  var onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;
@@ -60,7 +63,8 @@ var InlineDropdown = function InlineDropdown(props) {
60
63
  left: start.left
61
64
  });
62
65
  var handleClickOutside = function handleClickOutside(event) {
63
- if (toolbarRef.current && !toolbarRef.current.contains(event.target) && !event.target.closest('[data-inline-node]')) {
66
+ var insideSomeEditor = event.target.closest('[data-toolbar-for]');
67
+ if ((!insideSomeEditor || insideSomeEditor.dataset.toolbarFor !== toolbarEditor.current.instanceId) && !editor._toolbarOpened && toolbarRef.current && !toolbarRef.current.contains(event.target) && !event.target.closest('[data-inline-node]')) {
64
68
  setShowToolbar(false);
65
69
  }
66
70
  };
@@ -79,7 +83,6 @@ var InlineDropdown = function InlineDropdown(props) {
79
83
  style: {
80
84
  display: 'inline-flex',
81
85
  height: '50px',
82
- margin: '0 5px',
83
86
  cursor: 'pointer'
84
87
  }
85
88
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -91,7 +94,7 @@ var InlineDropdown = function InlineDropdown(props) {
91
94
  border: '1px solid #C0C3CF',
92
95
  boxSizing: 'border-box',
93
96
  borderRadius: '3px',
94
- margin: '0 4px',
97
+ margin: '0 2px',
95
98
  position: 'relative',
96
99
  alignItems: 'center'
97
100
  },
@@ -121,12 +124,38 @@ var InlineDropdown = function InlineDropdown(props) {
121
124
  top: '5px',
122
125
  right: '5px'
123
126
  }
124
- })), showToolbar && /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
127
+ })), showToolbar && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement("div", {
125
128
  ref: toolbarRef,
126
129
  style: {
127
130
  zIndex: 1
128
131
  }
129
- }, /*#__PURE__*/_react["default"].createElement(InlineDropdownToolbar, null)), document.body));
132
+ }, /*#__PURE__*/_react["default"].createElement(InlineDropdownToolbar, {
133
+ editorCallback: function editorCallback(instance) {
134
+ toolbarEditor.current = instance;
135
+ }
136
+ })), document.body), editor._tiptapContainerEl && /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_customToolbarWrapper["default"], {
137
+ deletable: true,
138
+ toolbarOpts: {
139
+ minWidth: 'auto'
140
+ },
141
+ autoWidth: true,
142
+ style: {
143
+ top: -40,
144
+ left: 0,
145
+ right: 0
146
+ },
147
+ onDelete: function onDelete() {
148
+ var tr = editor.state.tr;
149
+ tr["delete"](pos, pos + node.nodeSize);
150
+ // Prevent the debounced onBlur/onDone from firing into the
151
+ // now-deleted node's stale position
152
+ editor._toolbarOpened = false;
153
+ editor.view.dispatch(tr);
154
+ setShowToolbar(false);
155
+ editor.commands.focus();
156
+ },
157
+ showDone: false
158
+ }), editor._tiptapContainerEl)));
130
159
  };
131
160
  InlineDropdown.propTypes = {
132
161
  attributes: _propTypes["default"].object,
@@ -1 +1 @@
1
- {"version":3,"file":"InlineDropdown.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","_RespArea","_reactDom","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","InlineDropdown","props","editor","node","getPos","options","selected","attributes","attrs","value","error","html","toolbarRef","useRef","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","_useState3","top","left","_useState4","position","setPosition","InlineDropdownToolbar","respAreaToolbar","useEffect","selection","state","onlyThisNodeSelected","from","nodeSize","to","bodyRect","document","body","getBoundingClientRect","start","view","coordsAtPos","Math","abs","handleClickOutside","event","current","contains","target","closest","addEventListener","removeEventListener","createElement","NodeViewWrapper","className","style","display","height","margin","cursor","minWidth","background","border","boxSizing","borderRadius","alignItems","onClick","flex","overflow","padding","whiteSpace","textOverflow","verticalAlign","dangerouslySetInnerHTML","__html","Chevron","direction","right","ReactDOM","createPortal","ref","zIndex","propTypes","PropTypes","object","selectedItem","oneOfType","string","_default","exports"],"sources":["../../../src/components/respArea/InlineDropdown.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { Chevron } from '../icons/RespArea';\nimport ReactDOM from 'react-dom';\n\nconst InlineDropdown = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, error } = attributes;\n // TODO: Investigate\n // Needed because items with values inside have different positioning for some reason\n const html = value || '<div>&nbsp</div>';\n const toolbarRef = useRef(null);\n const [showToolbar, setShowToolbar] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const InlineDropdownToolbar = options.respAreaToolbar(node, editor, () => {});\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(selected);\n }\n } else {\n setShowToolbar(selected);\n }\n }, [editor, node, selected]);\n\n useEffect(() => {\n // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n if (\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 document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar]);\n\n return (\n <NodeViewWrapper\n className=\"inline-dropdown\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n height: '50px',\n margin: '0 5px',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n margin: '0 4px',\n position: 'relative',\n alignItems: 'center',\n }}\n onClick={() => setShowToolbar(true)}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n <span\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n </div>\n <Chevron\n direction=\"down\"\n style={{\n position: 'absolute',\n top: '5px',\n right: '5px',\n }}\n />\n </div>\n {showToolbar &&\n ReactDOM.createPortal(\n <div ref={toolbarRef} style={{ zIndex: 1 }}>\n <InlineDropdownToolbar />\n </div>,\n document.body,\n )}\n </NodeViewWrapper>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"InlineDropdown.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","_RespArea","_reactDom","_customToolbarWrapper","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","InlineDropdown","props","editor","node","getPos","options","selected","attributes","attrs","value","error","html","pos","toolbarRef","useRef","toolbarEditor","_useState","useState","_useState2","_slicedToArray2","showToolbar","setShowToolbar","_useState3","top","left","_useState4","position","setPosition","InlineDropdownToolbar","respAreaToolbar","useEffect","selection","state","onlyThisNodeSelected","from","nodeSize","to","bodyRect","document","body","getBoundingClientRect","start","view","coordsAtPos","Math","abs","handleClickOutside","event","insideSomeEditor","target","closest","dataset","toolbarFor","current","instanceId","_toolbarOpened","contains","addEventListener","removeEventListener","createElement","NodeViewWrapper","className","style","display","height","cursor","minWidth","background","border","boxSizing","borderRadius","margin","alignItems","onClick","flex","overflow","padding","whiteSpace","textOverflow","verticalAlign","dangerouslySetInnerHTML","__html","Chevron","direction","right","Fragment","ReactDOM","createPortal","ref","zIndex","editorCallback","instance","_tiptapContainerEl","deletable","toolbarOpts","autoWidth","onDelete","tr","dispatch","commands","focus","showDone","propTypes","PropTypes","object","selectedItem","oneOfType","string","_default","exports"],"sources":["../../../src/components/respArea/InlineDropdown.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { Chevron } from '../icons/RespArea';\nimport ReactDOM from 'react-dom';\nimport CustomToolbarWrapper from '../../extensions/custom-toolbar-wrapper';\n\nconst InlineDropdown = (props) => {\n const { editor, node, getPos, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, error } = attributes;\n // TODO: Investigate\n // Needed because items with values inside have different positioning for some reason\n const html = value || '<div>&nbsp</div>';\n const pos = getPos();\n const toolbarRef = useRef(null);\n const toolbarEditor = useRef(null);\n const [showToolbar, setShowToolbar] = useState(false);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const InlineDropdownToolbar = options.respAreaToolbar([node, pos], editor, () => {});\n\n useEffect(() => {\n const { selection } = editor.state;\n const onlyThisNodeSelected = selection.from + node.nodeSize === selection.to;\n\n if (selected) {\n if (onlyThisNodeSelected) {\n setShowToolbar(selected);\n }\n } else {\n setShowToolbar(selected);\n }\n }, [editor, node, selected]);\n\n useEffect(() => {\n // Calculate position relative to selection\n const bodyRect = document.body.getBoundingClientRect();\n const { from } = editor.state.selection;\n const start = editor.view.coordsAtPos(from);\n\n setPosition({\n top: start.top + Math.abs(bodyRect.top) + 40, // shift above\n left: start.left,\n });\n\n const handleClickOutside = (event) => {\n const insideSomeEditor = event.target.closest('[data-toolbar-for]');\n\n if (\n (!insideSomeEditor || insideSomeEditor.dataset.toolbarFor !== toolbarEditor.current.instanceId) &&\n !editor._toolbarOpened &&\n toolbarRef.current &&\n !toolbarRef.current.contains(event.target) &&\n !event.target.closest('[data-inline-node]')\n ) {\n setShowToolbar(false);\n }\n };\n\n if (showToolbar) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showToolbar]);\n\n return (\n <NodeViewWrapper\n className=\"inline-dropdown\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n height: '50px',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n margin: '0 2px',\n position: 'relative',\n alignItems: 'center',\n }}\n onClick={() => setShowToolbar(true)}\n >\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n <span\n style={{\n display: 'inline-block',\n verticalAlign: 'middle',\n }}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n </div>\n <Chevron\n direction=\"down\"\n style={{\n position: 'absolute',\n top: '5px',\n right: '5px',\n }}\n />\n </div>\n {showToolbar && (\n <React.Fragment>\n {ReactDOM.createPortal(\n <div ref={toolbarRef} style={{ zIndex: 1 }}>\n <InlineDropdownToolbar\n editorCallback={(instance) => {\n toolbarEditor.current = instance;\n }}\n />\n </div>,\n document.body,\n )}\n\n {editor._tiptapContainerEl &&\n ReactDOM.createPortal(\n <CustomToolbarWrapper\n deletable\n toolbarOpts={{ minWidth: 'auto' }}\n autoWidth\n style={{ top: -40, left: 0, right: 0 }}\n onDelete={() => {\n const { tr } = editor.state;\n tr.delete(pos, pos + node.nodeSize);\n // Prevent the debounced onBlur/onDone from firing into the\n // now-deleted node's stale position\n editor._toolbarOpened = false;\n editor.view.dispatch(tr);\n setShowToolbar(false);\n editor.commands.focus();\n }}\n showDone={false}\n />,\n editor._tiptapContainerEl,\n )}\n </React.Fragment>\n )}\n </NodeViewWrapper>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _react2 = require("@tiptap/react");
11
+ var _mathInput = require("@pie-lib/math-input");
12
+ var _styles = require("@mui/material/styles");
13
+ var StyledSpanContainer = (0, _styles.styled)('span')(function () {
14
+ return {
15
+ display: 'inline-flex',
16
+ border: '1px solid #C0C3CF',
17
+ margin: '1px 5px',
18
+ cursor: 'pointer',
19
+ alignItems: 'center',
20
+ justifyContent: 'center',
21
+ minWidth: '50px',
22
+ minHeight: '36px',
23
+ height: 'fit-content'
24
+ };
25
+ });
26
+ var StyledResponseBox = (0, _styles.styled)('div')(function (_ref) {
27
+ var theme = _ref.theme;
28
+ return {
29
+ background: theme.palette.grey['A100'],
30
+ color: theme.palette.grey['A700'],
31
+ display: 'inline-flex',
32
+ borderRight: '2px solid #C0C3CF',
33
+ boxSizing: 'border-box',
34
+ overflow: 'hidden',
35
+ fontSize: '12px',
36
+ minHeight: '36px',
37
+ height: '100%',
38
+ alignItems: 'center',
39
+ fontFamily: 'Symbola, Times New Roman, serif',
40
+ padding: '0 2px'
41
+ };
42
+ });
43
+ var StyledMathBlock = (0, _styles.styled)('div')(function () {
44
+ return {
45
+ flex: 8,
46
+ color: 'var(--pie-text, black)',
47
+ padding: '4px !important',
48
+ display: 'flex',
49
+ alignItems: 'center',
50
+ justifyContent: 'center',
51
+ backgroundColor: 'var(--pie-background, rgba(255, 255, 255, 0))',
52
+ '& > .mq-math-mode sup.mq-nthroot': {
53
+ fontSize: '70% !important',
54
+ verticalAlign: '1em !important'
55
+ },
56
+ '& > .mq-math-mode .mq-sqrt-stem': {
57
+ borderTop: '0.07em solid',
58
+ marginLeft: '-1.5px',
59
+ marginTop: '-2px !important',
60
+ paddingTop: '5px !important'
61
+ },
62
+ '& .mq-overarrow-inner': {
63
+ paddingTop: '0 !important',
64
+ border: 'none !important'
65
+ },
66
+ '& .mq-overarrow.mq-arrow-both': {
67
+ marginTop: '0px',
68
+ minWidth: '1.23em',
69
+ '& *': {
70
+ lineHeight: '1 !important'
71
+ },
72
+ '&:before': {
73
+ top: '-0.4em',
74
+ left: '-1px'
75
+ },
76
+ '&:after': {
77
+ top: '0px !important',
78
+ position: 'absolute !important',
79
+ right: '-2px'
80
+ },
81
+ '&.mq-empty:after': {
82
+ top: '-0.45em'
83
+ }
84
+ },
85
+ '& .mq-overarrow.mq-arrow-right': {
86
+ '&:before': {
87
+ top: '-0.4em',
88
+ right: '-1px'
89
+ }
90
+ },
91
+ '& .mq-overarrow-inner-right': {
92
+ display: 'none !important'
93
+ },
94
+ '& .mq-overarrow-inner-left': {
95
+ display: 'none !important'
96
+ }
97
+ };
98
+ });
99
+ var MathTemplated = function MathTemplated(props) {
100
+ var node = props.node,
101
+ options = props.options,
102
+ selected = props.selected;
103
+ var attributes = node.attrs;
104
+ var value = attributes.value,
105
+ index = attributes.index;
106
+
107
+ // add 1 to index to display R 1 instead of R 0
108
+ var keyToDisplay = "R ".concat(parseInt(index) + 1);
109
+
110
+ // console.log({nodeProps.children})
111
+ return /*#__PURE__*/_react["default"].createElement(_react2.NodeViewWrapper, {
112
+ className: "math-templated",
113
+ "data-selected": selected,
114
+ style: {
115
+ display: 'inline-flex',
116
+ minHeight: '36px',
117
+ minWidth: '50px',
118
+ cursor: 'pointer'
119
+ }
120
+ }, /*#__PURE__*/_react["default"].createElement(StyledSpanContainer, attributes, /*#__PURE__*/_react["default"].createElement(StyledResponseBox, null, keyToDisplay), /*#__PURE__*/_react["default"].createElement(StyledMathBlock, null, /*#__PURE__*/_react["default"].createElement(_mathInput.mq.Static, {
121
+ latex: value
122
+ }))));
123
+ };
124
+ MathTemplated.propTypes = {
125
+ attributes: _propTypes["default"].object,
126
+ value: _propTypes["default"].string,
127
+ keyToDisplay: _propTypes["default"].string
128
+ };
129
+ var _default = exports["default"] = MathTemplated;
130
+ //# sourceMappingURL=MathTemplated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MathTemplated.js","names":["_react","_interopRequireDefault","require","_propTypes","_react2","_mathInput","_styles","StyledSpanContainer","styled","display","border","margin","cursor","alignItems","justifyContent","minWidth","minHeight","height","StyledResponseBox","_ref","theme","background","palette","grey","color","borderRight","boxSizing","overflow","fontSize","fontFamily","padding","StyledMathBlock","flex","backgroundColor","verticalAlign","borderTop","marginLeft","marginTop","paddingTop","lineHeight","top","left","position","right","MathTemplated","props","node","options","selected","attributes","attrs","value","index","keyToDisplay","concat","parseInt","createElement","NodeViewWrapper","className","style","mq","Static","latex","propTypes","PropTypes","object","string","_default","exports"],"sources":["../../../src/components/respArea/MathTemplated.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { NodeViewWrapper } from '@tiptap/react';\nimport { mq } from '@pie-lib/math-input';\nimport { styled } from '@mui/material/styles';\n\nconst StyledSpanContainer = styled('span')(() => ({\n display: 'inline-flex',\n border: '1px solid #C0C3CF',\n margin: '1px 5px',\n cursor: 'pointer',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '50px',\n minHeight: '36px',\n height: 'fit-content',\n}));\n\nconst StyledResponseBox = styled('div')(({ theme }) => ({\n background: theme.palette.grey['A100'],\n color: theme.palette.grey['A700'],\n display: 'inline-flex',\n borderRight: '2px solid #C0C3CF',\n boxSizing: 'border-box',\n overflow: 'hidden',\n fontSize: '12px',\n minHeight: '36px',\n height: '100%',\n alignItems: 'center',\n fontFamily: 'Symbola, Times New Roman, serif',\n padding: '0 2px',\n}));\n\nconst StyledMathBlock = styled('div')(() => ({\n flex: 8,\n color: 'var(--pie-text, black)',\n padding: '4px !important',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--pie-background, rgba(255, 255, 255, 0))',\n '& > .mq-math-mode sup.mq-nthroot': {\n fontSize: '70% !important',\n verticalAlign: '1em !important',\n },\n '& > .mq-math-mode .mq-sqrt-stem': {\n borderTop: '0.07em solid',\n marginLeft: '-1.5px',\n marginTop: '-2px !important',\n paddingTop: '5px !important',\n },\n '& .mq-overarrow-inner': {\n paddingTop: '0 !important',\n border: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n marginTop: '0px',\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '0px !important',\n position: 'absolute !important',\n right: '-2px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n}));\nconst MathTemplated = (props) => {\n const { node, options, selected } = props;\n const { attrs: attributes } = node;\n const { value, index } = attributes;\n\n // add 1 to index to display R 1 instead of R 0\n const keyToDisplay = `R ${parseInt(index) + 1}`;\n\n // console.log({nodeProps.children})\n return (\n <NodeViewWrapper\n className=\"math-templated\"\n data-selected={selected}\n style={{\n display: 'inline-flex',\n minHeight: '36px',\n minWidth: '50px',\n cursor: 'pointer',\n }}\n >\n <StyledSpanContainer {...attributes}>\n <StyledResponseBox>{keyToDisplay}</StyledResponseBox>\n <StyledMathBlock>\n <mq.Static latex={value} />\n </StyledMathBlock>\n </StyledSpanContainer>\n </NodeViewWrapper>\n );\n};\n\nMathTemplated.propTypes = {\n attributes: PropTypes.object,\n value: PropTypes.string,\n keyToDisplay: PropTypes.string,\n};\n\nexport default MathTemplated;\n"],"mappings":"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","ignoreList":[]}
@@ -65,7 +65,8 @@ function CustomToolbarWrapper(props) {
65
65
  doneButtonRef = props.doneButtonRef,
66
66
  onDelete = props.onDelete,
67
67
  showDone = props.showDone,
68
- onDone = props.onDone;
68
+ onDone = props.onDone,
69
+ style = props.style;
69
70
  var customStyles = toolbarOpts.minWidth !== undefined ? {
70
71
  minWidth: toolbarOpts.minWidth
71
72
  } : {};
@@ -76,7 +77,7 @@ function CustomToolbarWrapper(props) {
76
77
  isFocused: toolbarOpts.alwaysVisible || isFocused,
77
78
  autoWidth: autoWidth,
78
79
  isHidden: toolbarOpts.isHidden === true,
79
- style: _objectSpread({}, customStyles)
80
+ style: _objectSpread(_objectSpread({}, customStyles), style)
80
81
  }, children, /*#__PURE__*/_react["default"].createElement(SharedContainer, null, deletable && /*#__PURE__*/_react["default"].createElement(StyledIconButton, {
81
82
  "aria-label": "Delete",
82
83
  onMouseDown: function onMouseDown(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"custom-toolbar-wrapper.js","names":["_react","_interopRequireDefault","require","_IconButton","_Delete","_constants","_styles","_doneButton","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","StyledToolbar","styled","shouldForwardProp","prop","includes","_ref","showDone","toolbarAlignment","isFocused","autoWidth","isHidden","position","zIndex","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","opacity","right","width","visibility","StyledIconButton","IconButton","height","verticalAlign","SharedContainer","CustomToolbarWrapper","props","children","deletable","toolbarOpts","doneButtonRef","onDelete","onDone","customStyles","undefined","createElement","className","PIE_TOOLBAR__CLASS","alignment","alwaysVisible","style","onMouseDown","DoneButton","onClick","_default","exports"],"sources":["../../src/extensions/custom-toolbar-wrapper.jsx"],"sourcesContent":["import React from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport Delete from '@mui/icons-material/Delete';\nimport { PIE_TOOLBAR__CLASS } from '../constants';\nimport { styled } from '@mui/material/styles';\nimport { DoneButton } from '../components/common/done-button';\n\nconst StyledToolbar = styled('div', {\n shouldForwardProp: (prop) => !['showDone', 'toolbarAlignment', 'isFocused', 'autoWidth', 'isHidden'].includes(prop),\n})(({ showDone, toolbarAlignment, isFocused, autoWidth, isHidden }) => ({\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: showDone ? '280px' : '265px',\n margin: '5px 0 0 0',\n padding: '2px',\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 boxSizing: 'border-box',\n display: 'flex',\n opacity: 1,\n ...(toolbarAlignment === 'right' && {\n right: 0,\n }),\n ...(autoWidth\n ? {\n width: 'auto',\n }\n : {\n width: '100%',\n }),\n ...(isHidden && {\n visibility: 'hidden',\n }),\n}));\n\nconst StyledIconButton = styled(IconButton)({\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top',\n});\n\nconst SharedContainer = styled('div')({\n display: 'flex',\n});\n\nfunction CustomToolbarWrapper(props) {\n const { children, deletable, toolbarOpts, autoWidth, isFocused, doneButtonRef, onDelete, showDone, onDone } = props;\n const customStyles = toolbarOpts.minWidth !== undefined ? { minWidth: toolbarOpts.minWidth } : {};\n\n return (\n <StyledToolbar\n className={PIE_TOOLBAR__CLASS}\n showDone={showDone}\n toolbarAlignment={toolbarOpts.alignment}\n isFocused={toolbarOpts.alwaysVisible || isFocused}\n autoWidth={autoWidth}\n isHidden={toolbarOpts.isHidden === true}\n style={{ ...customStyles }}\n >\n {children}\n\n <SharedContainer>\n {deletable && (\n <StyledIconButton aria-label=\"Delete\" onMouseDown={(e) => onDelete?.(e)}>\n <Delete />\n </StyledIconButton>\n )}\n {showDone && <DoneButton doneButtonRef={doneButtonRef} onClick={onDone} />}\n </SharedContainer>\n </StyledToolbar>\n );\n}\n\nexport default CustomToolbarWrapper;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"custom-toolbar-wrapper.js","names":["_react","_interopRequireDefault","require","_IconButton","_Delete","_constants","_styles","_doneButton","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","StyledToolbar","styled","shouldForwardProp","prop","includes","_ref","showDone","toolbarAlignment","isFocused","autoWidth","isHidden","position","zIndex","cursor","justifyContent","background","minWidth","margin","padding","boxShadow","boxSizing","display","opacity","right","width","visibility","StyledIconButton","IconButton","height","verticalAlign","SharedContainer","CustomToolbarWrapper","props","children","deletable","toolbarOpts","doneButtonRef","onDelete","onDone","style","customStyles","undefined","createElement","className","PIE_TOOLBAR__CLASS","alignment","alwaysVisible","onMouseDown","DoneButton","onClick","_default","exports"],"sources":["../../src/extensions/custom-toolbar-wrapper.jsx"],"sourcesContent":["import React from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport Delete from '@mui/icons-material/Delete';\nimport { PIE_TOOLBAR__CLASS } from '../constants';\nimport { styled } from '@mui/material/styles';\nimport { DoneButton } from '../components/common/done-button';\n\nconst StyledToolbar = styled('div', {\n shouldForwardProp: (prop) => !['showDone', 'toolbarAlignment', 'isFocused', 'autoWidth', 'isHidden'].includes(prop),\n})(({ showDone, toolbarAlignment, isFocused, autoWidth, isHidden }) => ({\n position: 'absolute',\n zIndex: 10,\n cursor: 'pointer',\n justifyContent: 'space-between',\n background: 'var(--editable-html-toolbar-bg, #efefef)',\n minWidth: showDone ? '280px' : '265px',\n margin: '5px 0 0 0',\n padding: '2px',\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 boxSizing: 'border-box',\n display: 'flex',\n opacity: 1,\n ...(toolbarAlignment === 'right' && {\n right: 0,\n }),\n ...(autoWidth\n ? {\n width: 'auto',\n }\n : {\n width: '100%',\n }),\n ...(isHidden && {\n visibility: 'hidden',\n }),\n}));\n\nconst StyledIconButton = styled(IconButton)({\n width: '28px',\n height: '28px',\n padding: '4px',\n verticalAlign: 'top',\n});\n\nconst SharedContainer = styled('div')({\n display: 'flex',\n});\n\nfunction CustomToolbarWrapper(props) {\n const { children, deletable, toolbarOpts, autoWidth, isFocused, doneButtonRef, onDelete, showDone, onDone, style } = props;\n const customStyles = toolbarOpts.minWidth !== undefined ? { minWidth: toolbarOpts.minWidth } : {};\n\n return (\n <StyledToolbar\n className={PIE_TOOLBAR__CLASS}\n showDone={showDone}\n toolbarAlignment={toolbarOpts.alignment}\n isFocused={toolbarOpts.alwaysVisible || isFocused}\n autoWidth={autoWidth}\n isHidden={toolbarOpts.isHidden === true}\n style={{ ...customStyles, ...style }}\n >\n {children}\n\n <SharedContainer>\n {deletable && (\n <StyledIconButton aria-label=\"Delete\" onMouseDown={(e) => onDelete?.(e)}>\n <Delete />\n </StyledIconButton>\n )}\n {showDone && <DoneButton doneButtonRef={doneButtonRef} onClick={onDone} />}\n </SharedContainer>\n </StyledToolbar>\n );\n}\n\nexport default CustomToolbarWrapper;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAA8D,SAAAM,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAE9D,IAAMoB,aAAa,GAAG,IAAAC,cAAM,EAAC,KAAK,EAAE;EAClCC,iBAAiB,EAAE,SAAnBA,iBAAiBA,CAAGC,IAAI;IAAA,OAAK,CAAC,CAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAACC,QAAQ,CAACD,IAAI,CAAC;EAAA;AACrH,CAAC,CAAC,CAAC,UAAAE,IAAA;EAAA,IAAGC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,gBAAgB,GAAAF,IAAA,CAAhBE,gBAAgB;IAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS;IAAEC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IAAEC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;EAAA,OAAAlB,aAAA,CAAAA,aAAA,CAAAA,aAAA;IAC9DmB,QAAQ,EAAE,UAAU;IACpBC,MAAM,EAAE,EAAE;IACVC,MAAM,EAAE,SAAS;IACjBC,cAAc,EAAE,eAAe;IAC/BC,UAAU,EAAE,0CAA0C;IACtDC,QAAQ,EAAEV,QAAQ,GAAG,OAAO,GAAG,OAAO;IACtCW,MAAM,EAAE,WAAW;IACnBC,OAAO,EAAE,KAAK;IACdC,SAAS,EACP,+GAA+G;IACjHC,SAAS,EAAE,YAAY;IACvBC,OAAO,EAAE,MAAM;IACfC,OAAO,EAAE;EAAC,GACNf,gBAAgB,KAAK,OAAO,IAAI;IAClCgB,KAAK,EAAE;EACT,CAAC,GACGd,SAAS,GACT;IACEe,KAAK,EAAE;EACT,CAAC,GACD;IACEA,KAAK,EAAE;EACT,CAAC,GACDd,QAAQ,IAAI;IACde,UAAU,EAAE;EACd,CAAC;AAAA,CACD,CAAC;AAEH,IAAMC,gBAAgB,GAAG,IAAAzB,cAAM,EAAC0B,sBAAU,CAAC,CAAC;EAC1CH,KAAK,EAAE,MAAM;EACbI,MAAM,EAAE,MAAM;EACdV,OAAO,EAAE,KAAK;EACdW,aAAa,EAAE;AACjB,CAAC,CAAC;AAEF,IAAMC,eAAe,GAAG,IAAA7B,cAAM,EAAC,KAAK,CAAC,CAAC;EACpCoB,OAAO,EAAE;AACX,CAAC,CAAC;AAEF,SAASU,oBAAoBA,CAACC,KAAK,EAAE;EACnC,IAAQC,QAAQ,GAAqGD,KAAK,CAAlHC,QAAQ;IAAEC,SAAS,GAA0FF,KAAK,CAAxGE,SAAS;IAAEC,WAAW,GAA6EH,KAAK,CAA7FG,WAAW;IAAE1B,SAAS,GAAkEuB,KAAK,CAAhFvB,SAAS;IAAED,SAAS,GAAuDwB,KAAK,CAArExB,SAAS;IAAE4B,aAAa,GAAwCJ,KAAK,CAA1DI,aAAa;IAAEC,QAAQ,GAA8BL,KAAK,CAA3CK,QAAQ;IAAE/B,QAAQ,GAAoB0B,KAAK,CAAjC1B,QAAQ;IAAEgC,MAAM,GAAYN,KAAK,CAAvBM,MAAM;IAAEC,KAAK,GAAKP,KAAK,CAAfO,KAAK;EAChH,IAAMC,YAAY,GAAGL,WAAW,CAACnB,QAAQ,KAAKyB,SAAS,GAAG;IAAEzB,QAAQ,EAAEmB,WAAW,CAACnB;EAAS,CAAC,GAAG,CAAC,CAAC;EAEjG,oBACE7C,MAAA,YAAAuE,aAAA,CAAC1C,aAAa;IACZ2C,SAAS,EAAEC,6BAAmB;IAC9BtC,QAAQ,EAAEA,QAAS;IACnBC,gBAAgB,EAAE4B,WAAW,CAACU,SAAU;IACxCrC,SAAS,EAAE2B,WAAW,CAACW,aAAa,IAAItC,SAAU;IAClDC,SAAS,EAAEA,SAAU;IACrBC,QAAQ,EAAEyB,WAAW,CAACzB,QAAQ,KAAK,IAAK;IACxC6B,KAAK,EAAA/C,aAAA,CAAAA,aAAA,KAAOgD,YAAY,GAAKD,KAAK;EAAG,GAEpCN,QAAQ,eAET9D,MAAA,YAAAuE,aAAA,CAACZ,eAAe,QACbI,SAAS,iBACR/D,MAAA,YAAAuE,aAAA,CAAChB,gBAAgB;IAAC,cAAW,QAAQ;IAACqB,WAAW,EAAE,SAAbA,WAAWA,CAAGnE,CAAC;MAAA,OAAKyD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGzD,CAAC,CAAC;IAAA;EAAC,gBACtET,MAAA,YAAAuE,aAAA,CAACnE,OAAA,WAAM,MAAE,CACO,CACnB,EACA+B,QAAQ,iBAAInC,MAAA,YAAAuE,aAAA,CAAChE,WAAA,CAAAsE,UAAU;IAACZ,aAAa,EAAEA,aAAc;IAACa,OAAO,EAAEX;EAAO,CAAE,CAC1D,CACJ,CAAC;AAEpB;AAAC,IAAAY,QAAA,GAAAC,OAAA,cAEcpB,oBAAoB","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DivNode = void 0;
7
+ var _core = require("@tiptap/core");
8
+ // DivNode.ts
9
+
10
+ var DivNode = exports.DivNode = _core.Node.create({
11
+ name: 'div',
12
+ group: 'block',
13
+ content: 'inline*',
14
+ parseHTML: function parseHTML() {
15
+ return [{
16
+ tag: 'div'
17
+ }];
18
+ },
19
+ renderHTML: function renderHTML(_ref) {
20
+ var HTMLAttributes = _ref.HTMLAttributes;
21
+ return ['div', HTMLAttributes, 0];
22
+ },
23
+ addKeyboardShortcuts: function addKeyboardShortcuts() {
24
+ var _this = this;
25
+ var isInsideListItem = function isInsideListItem($from) {
26
+ for (var depth = $from.depth; depth >= 0; depth -= 1) {
27
+ if ($from.node(depth).type.name === 'listItem') {
28
+ return true;
29
+ }
30
+ }
31
+ return false;
32
+ };
33
+ return {
34
+ Enter: function Enter() {
35
+ var state = _this.editor.state;
36
+ var $from = state.selection.$from;
37
+ if ($from.parent.type.name !== 'div') {
38
+ return false;
39
+ }
40
+ if (isInsideListItem($from)) {
41
+ return false;
42
+ }
43
+ return _this.editor.chain().focus().setNode('paragraph') // current div becomes <p>
44
+ .splitBlock() // create another <p>
45
+ .run();
46
+ },
47
+ // When the cursor is in a div and the user presses Backspace,
48
+ // ProseMirror's default handler may try to join/delete the block node
49
+ // once it becomes empty. That triggers the Enter shortcut above
50
+ // (div → p conversion + split), making it look like a new line is
51
+ // inserted instead of deleting.
52
+ // We handle two cases explicitly:
53
+ // 1. The div already IS empty → swallow the event (nothing to delete).
54
+ // 2. The div has exactly ONE character left → delete just that character
55
+ // using a precise transaction, then stop. This prevents ProseMirror
56
+ // from following up with a block-join that triggers the Enter handler.
57
+ Backspace: function Backspace() {
58
+ var state = _this.editor.state;
59
+ var _state$selection = state.selection,
60
+ $from = _state$selection.$from,
61
+ selectionEmpty = _state$selection.empty;
62
+ if ($from.parent.type.name !== 'div') {
63
+ return false;
64
+ }
65
+ if (!selectionEmpty) {
66
+ return false;
67
+ }
68
+ var parentText = $from.parent.textContent;
69
+ if (parentText.length === 0) {
70
+ return state.doc.childCount === 1 ? true : false;
71
+ }
72
+ if (parentText.length === 1 && $from.parentOffset === 1) {
73
+ var tr = state.tr;
74
+ tr["delete"]($from.pos - 1, $from.pos);
75
+ _this.editor.view.dispatch(tr);
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ };
81
+ }
82
+ });
83
+ //# sourceMappingURL=div-node.js.map
@@ -0,0 +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","isInsideListItem","$from","depth","node","type","Enter","state","editor","selection","parent","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 const isInsideListItem = ($from) => {\n for (let depth = $from.depth; depth >= 0; depth -= 1) {\n if ($from.node(depth).type.name === 'listItem') {\n return true;\n }\n }\n return false;\n };\n\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 if (isInsideListItem($from)) {\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 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":"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","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EnsureEmptyRootIsDiv = void 0;
7
+ var _core = require("@tiptap/core");
8
+ var _state = require("@tiptap/pm/state");
9
+ /**
10
+ * After ProseMirror repairs an empty document, it often inserts a `paragraph`.
11
+ * We want a lone empty top-level block to be `div` (DivNode) so typing stays `<div>A</div>`.
12
+ */
13
+ var EnsureEmptyRootIsDiv = exports.EnsureEmptyRootIsDiv = _core.Extension.create({
14
+ name: 'ensureEmptyRootIsDiv',
15
+ addProseMirrorPlugins: function addProseMirrorPlugins() {
16
+ var key = new _state.PluginKey(this.name);
17
+ return [new _state.Plugin({
18
+ key: key,
19
+ appendTransaction: function appendTransaction(transactions, _oldState, newState) {
20
+ if (!transactions.some(function (tr) {
21
+ return tr.docChanged;
22
+ })) {
23
+ return null;
24
+ }
25
+ var doc = newState.doc;
26
+ if (doc.childCount !== 1) {
27
+ return null;
28
+ }
29
+ var first = doc.firstChild;
30
+ if (first.type.name !== 'paragraph' || first.content.size > 0) {
31
+ return null;
32
+ }
33
+ var divType = newState.schema.nodes.div;
34
+ if (!divType) {
35
+ return null;
36
+ }
37
+
38
+ // Top-level content positions are 0 .. doc.content.size. The first block spans
39
+ // [0, first.nodeSize). Using start=1 replaces the wrong slice and can leave the
40
+ // document inconsistent after a full delete (Cmd+A, Backspace).
41
+ var start = 0;
42
+ var end = first.nodeSize;
43
+ return newState.tr.replaceWith(start, end, divType.create());
44
+ }
45
+ })];
46
+ }
47
+ });
48
+ //# sourceMappingURL=ensure-empty-root-div.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-empty-root-div.js","names":["_core","require","_state","EnsureEmptyRootIsDiv","exports","Extension","create","name","addProseMirrorPlugins","key","PluginKey","Plugin","appendTransaction","transactions","_oldState","newState","some","tr","docChanged","doc","childCount","first","firstChild","type","content","size","divType","schema","nodes","div","start","end","nodeSize","replaceWith"],"sources":["../../src/extensions/ensure-empty-root-div.js"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\n\n/**\n * After ProseMirror repairs an empty document, it often inserts a `paragraph`.\n * We want a lone empty top-level block to be `div` (DivNode) so typing stays `<div>A</div>`.\n */\nexport const EnsureEmptyRootIsDiv = Extension.create({\n name: 'ensureEmptyRootIsDiv',\n\n addProseMirrorPlugins() {\n const key = new PluginKey(this.name);\n\n return [\n new Plugin({\n key,\n appendTransaction(transactions, _oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) {\n return null;\n }\n\n const { doc } = newState;\n if (doc.childCount !== 1) {\n return null;\n }\n\n const first = doc.firstChild;\n if (first.type.name !== 'paragraph' || first.content.size > 0) {\n return null;\n }\n\n const divType = newState.schema.nodes.div;\n if (!divType) {\n return null;\n }\n\n // Top-level content positions are 0 .. doc.content.size. The first block spans\n // [0, first.nodeSize). Using start=1 replaces the wrong slice and can leave the\n // document inconsistent after a full delete (Cmd+A, Backspace).\n const start = 0;\n const end = first.nodeSize;\n return newState.tr.replaceWith(start, end, divType.create());\n },\n }),\n ];\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACO,IAAME,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAGE,eAAS,CAACC,MAAM,CAAC;EACnDC,IAAI,EAAE,sBAAsB;EAE5BC,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;IACtB,IAAMC,GAAG,GAAG,IAAIC,gBAAS,CAAC,IAAI,CAACH,IAAI,CAAC;IAEpC,OAAO,CACL,IAAII,aAAM,CAAC;MACTF,GAAG,EAAHA,GAAG;MACHG,iBAAiB,WAAjBA,iBAAiBA,CAACC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,EAAE;QACnD,IAAI,CAACF,YAAY,CAACG,IAAI,CAAC,UAACC,EAAE;UAAA,OAAKA,EAAE,CAACC,UAAU;QAAA,EAAC,EAAE;UAC7C,OAAO,IAAI;QACb;QAEA,IAAQC,GAAG,GAAKJ,QAAQ,CAAhBI,GAAG;QACX,IAAIA,GAAG,CAACC,UAAU,KAAK,CAAC,EAAE;UACxB,OAAO,IAAI;QACb;QAEA,IAAMC,KAAK,GAAGF,GAAG,CAACG,UAAU;QAC5B,IAAID,KAAK,CAACE,IAAI,CAAChB,IAAI,KAAK,WAAW,IAAIc,KAAK,CAACG,OAAO,CAACC,IAAI,GAAG,CAAC,EAAE;UAC7D,OAAO,IAAI;QACb;QAEA,IAAMC,OAAO,GAAGX,QAAQ,CAACY,MAAM,CAACC,KAAK,CAACC,GAAG;QACzC,IAAI,CAACH,OAAO,EAAE;UACZ,OAAO,IAAI;QACb;;QAEA;QACA;QACA;QACA,IAAMI,KAAK,GAAG,CAAC;QACf,IAAMC,GAAG,GAAGV,KAAK,CAACW,QAAQ;QAC1B,OAAOjB,QAAQ,CAACE,EAAE,CAACgB,WAAW,CAACH,KAAK,EAAEC,GAAG,EAAEL,OAAO,CAACpB,MAAM,CAAC,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,CACH;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EnsureListItemContentIsDiv = void 0;
7
+ var _core = require("@tiptap/core");
8
+ var _state = require("@tiptap/pm/state");
9
+ /**
10
+ * Some list operations preserve/create `paragraph` children in `listItem`.
11
+ * Normalize direct `listItem > paragraph` children into `div` so list content
12
+ * stays consistent with DivNode-based editing.
13
+ */
14
+ var EnsureListItemContentIsDiv = exports.EnsureListItemContentIsDiv = _core.Extension.create({
15
+ name: 'ensureListItemContentIsDiv',
16
+ addProseMirrorPlugins: function addProseMirrorPlugins() {
17
+ var key = new _state.PluginKey(this.name);
18
+ return [new _state.Plugin({
19
+ key: key,
20
+ appendTransaction: function appendTransaction(transactions, _oldState, newState) {
21
+ if (!transactions.some(function (tr) {
22
+ return tr.docChanged;
23
+ })) {
24
+ return null;
25
+ }
26
+ var doc = newState.doc,
27
+ schema = newState.schema;
28
+ var divType = schema.nodes.div;
29
+ if (!divType) {
30
+ return null;
31
+ }
32
+ var positionsToConvert = [];
33
+ doc.descendants(function (node, pos) {
34
+ if (node.type.name !== 'listItem') {
35
+ return;
36
+ }
37
+ var childOffset = 1;
38
+ node.forEach(function (child) {
39
+ if (child.type.name === 'paragraph') {
40
+ positionsToConvert.push({
41
+ pos: pos + childOffset,
42
+ attrs: child.attrs
43
+ });
44
+ }
45
+ childOffset += child.nodeSize;
46
+ });
47
+ });
48
+ if (positionsToConvert.length === 0) {
49
+ return null;
50
+ }
51
+ var tr = newState.tr;
52
+ positionsToConvert.sort(function (a, b) {
53
+ return b.pos - a.pos;
54
+ }).forEach(function (_ref) {
55
+ var pos = _ref.pos,
56
+ attrs = _ref.attrs;
57
+ return tr.setNodeMarkup(pos, divType, attrs);
58
+ });
59
+ return tr;
60
+ }
61
+ })];
62
+ }
63
+ });
64
+ //# sourceMappingURL=ensure-list-item-content-is-div.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-list-item-content-is-div.js","names":["_core","require","_state","EnsureListItemContentIsDiv","exports","Extension","create","name","addProseMirrorPlugins","key","PluginKey","Plugin","appendTransaction","transactions","_oldState","newState","some","tr","docChanged","doc","schema","divType","nodes","div","positionsToConvert","descendants","node","pos","type","childOffset","forEach","child","push","attrs","nodeSize","length","sort","a","b","_ref","setNodeMarkup"],"sources":["../../src/extensions/ensure-list-item-content-is-div.js"],"sourcesContent":["import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\n\n/**\n * Some list operations preserve/create `paragraph` children in `listItem`.\n * Normalize direct `listItem > paragraph` children into `div` so list content\n * stays consistent with DivNode-based editing.\n */\nexport const EnsureListItemContentIsDiv = Extension.create({\n name: 'ensureListItemContentIsDiv',\n\n addProseMirrorPlugins() {\n const key = new PluginKey(this.name);\n\n return [\n new Plugin({\n key,\n appendTransaction(transactions, _oldState, newState) {\n if (!transactions.some((tr) => tr.docChanged)) {\n return null;\n }\n\n const { doc, schema } = newState;\n const divType = schema.nodes.div;\n if (!divType) {\n return null;\n }\n\n const positionsToConvert = [];\n\n doc.descendants((node, pos) => {\n if (node.type.name !== 'listItem') {\n return;\n }\n\n let childOffset = 1;\n node.forEach((child) => {\n if (child.type.name === 'paragraph') {\n positionsToConvert.push({\n pos: pos + childOffset,\n attrs: child.attrs,\n });\n }\n childOffset += child.nodeSize;\n });\n });\n\n if (positionsToConvert.length === 0) {\n return null;\n }\n\n const tr = newState.tr;\n positionsToConvert\n .sort((a, b) => b.pos - a.pos)\n .forEach(({ pos, attrs }) => tr.setNodeMarkup(pos, divType, attrs));\n\n return tr;\n },\n }),\n ];\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,IAAME,0BAA0B,GAAAC,OAAA,CAAAD,0BAAA,GAAGE,eAAS,CAACC,MAAM,CAAC;EACzDC,IAAI,EAAE,4BAA4B;EAElCC,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;IACtB,IAAMC,GAAG,GAAG,IAAIC,gBAAS,CAAC,IAAI,CAACH,IAAI,CAAC;IAEpC,OAAO,CACL,IAAII,aAAM,CAAC;MACTF,GAAG,EAAHA,GAAG;MACHG,iBAAiB,WAAjBA,iBAAiBA,CAACC,YAAY,EAAEC,SAAS,EAAEC,QAAQ,EAAE;QACnD,IAAI,CAACF,YAAY,CAACG,IAAI,CAAC,UAACC,EAAE;UAAA,OAAKA,EAAE,CAACC,UAAU;QAAA,EAAC,EAAE;UAC7C,OAAO,IAAI;QACb;QAEA,IAAQC,GAAG,GAAaJ,QAAQ,CAAxBI,GAAG;UAAEC,MAAM,GAAKL,QAAQ,CAAnBK,MAAM;QACnB,IAAMC,OAAO,GAAGD,MAAM,CAACE,KAAK,CAACC,GAAG;QAChC,IAAI,CAACF,OAAO,EAAE;UACZ,OAAO,IAAI;QACb;QAEA,IAAMG,kBAAkB,GAAG,EAAE;QAE7BL,GAAG,CAACM,WAAW,CAAC,UAACC,IAAI,EAAEC,GAAG,EAAK;UAC7B,IAAID,IAAI,CAACE,IAAI,CAACrB,IAAI,KAAK,UAAU,EAAE;YACjC;UACF;UAEA,IAAIsB,WAAW,GAAG,CAAC;UACnBH,IAAI,CAACI,OAAO,CAAC,UAACC,KAAK,EAAK;YACtB,IAAIA,KAAK,CAACH,IAAI,CAACrB,IAAI,KAAK,WAAW,EAAE;cACnCiB,kBAAkB,CAACQ,IAAI,CAAC;gBACtBL,GAAG,EAAEA,GAAG,GAAGE,WAAW;gBACtBI,KAAK,EAAEF,KAAK,CAACE;cACf,CAAC,CAAC;YACJ;YACAJ,WAAW,IAAIE,KAAK,CAACG,QAAQ;UAC/B,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAIV,kBAAkB,CAACW,MAAM,KAAK,CAAC,EAAE;UACnC,OAAO,IAAI;QACb;QAEA,IAAMlB,EAAE,GAAGF,QAAQ,CAACE,EAAE;QACtBO,kBAAkB,CACfY,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC;UAAA,OAAKA,CAAC,CAACX,GAAG,GAAGU,CAAC,CAACV,GAAG;QAAA,EAAC,CAC7BG,OAAO,CAAC,UAAAS,IAAA;UAAA,IAAGZ,GAAG,GAAAY,IAAA,CAAHZ,GAAG;YAAEM,KAAK,GAAAM,IAAA,CAALN,KAAK;UAAA,OAAOhB,EAAE,CAACuB,aAAa,CAACb,GAAG,EAAEN,OAAO,EAAEY,KAAK,CAAC;QAAA,EAAC;QAErE,OAAOhB,EAAE;MACX;IACF,CAAC,CAAC,CACH;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ExtendedListItem = void 0;
7
+ var _extensionListItem = require("@tiptap/extension-list-item");
8
+ /**
9
+ * Default list items use `paragraph block*`, so empty/new items become `<p>`.
10
+ * Prefer `div` first to keep consistency with DivNode at root and table cells.
11
+ */
12
+ var ExtendedListItem = exports.ExtendedListItem = _extensionListItem.ListItem.extend({
13
+ content: '(div | paragraph | heading | bulletList | orderedList | blockquote | codeBlock | horizontalRule | image | imageUploadNode)+'
14
+ });
15
+ //# sourceMappingURL=extended-list-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extended-list-item.js","names":["_extensionListItem","require","ExtendedListItem","exports","ListItem","extend","content"],"sources":["../../src/extensions/extended-list-item.js"],"sourcesContent":["import { ListItem } from '@tiptap/extension-list-item';\n\n/**\n * Default list items use `paragraph block*`, so empty/new items become `<p>`.\n * Prefer `div` first to keep consistency with DivNode at root and table cells.\n */\nexport const ExtendedListItem = ListItem.extend({\n content:\n '(div | paragraph | heading | bulletList | orderedList | blockquote | codeBlock | horizontalRule | image | imageUploadNode)+',\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,IAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAGE,2BAAQ,CAACC,MAAM,CAAC;EAC9CC,OAAO,EACL;AACJ,CAAC,CAAC","ignoreList":[]}