@bigbinary/neeto-editor 1.45.26 → 1.45.28
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/dist/Editor.js +268 -41
- package/dist/Editor.js.map +1 -1
- package/dist/EditorContent.js +3 -0
- package/dist/EditorContent.js.map +1 -1
- package/dist/FormikEditor.js +1 -1
- package/dist/Menu.js +1 -1
- package/dist/{chunk-B_ypvaUL.js → chunk-C0xZGEez.js} +53 -2
- package/dist/{chunk-B_ypvaUL.js.map → chunk-C0xZGEez.js.map} +1 -1
- package/dist/cjs/Editor.cjs.js +268 -41
- package/dist/cjs/Editor.cjs.js.map +1 -1
- package/dist/cjs/EditorContent.cjs.js +3 -0
- package/dist/cjs/EditorContent.cjs.js.map +1 -1
- package/dist/cjs/FormikEditor.cjs.js +1 -1
- package/dist/cjs/Menu.cjs.js +1 -1
- package/dist/cjs/{chunk-DZ7EK7nf.cjs.js → chunk-C-KwpuWA.cjs.js} +57 -2
- package/dist/cjs/{chunk-DZ7EK7nf.cjs.js.map → chunk-C-KwpuWA.cjs.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/editor-stats.html +19 -1
- package/dist/headerLinks.js +3 -0
- package/dist/headerLinks.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -1
|
@@ -110,6 +110,9 @@ var buildHeaderLinks = function buildHeaderLinks(editorContentNode) {
|
|
|
110
110
|
var headerTags = editorContentNode.querySelectorAll("h1, h2, h3, h4, h5, h6");
|
|
111
111
|
var usedIds = new Map();
|
|
112
112
|
headerTags.forEach(function (heading) {
|
|
113
|
+
if (heading.getAttribute('data-link') === 'false') {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
113
116
|
var headingId = convertTextToId(heading.textContent);
|
|
114
117
|
if (usedIds.has(headingId)) {
|
|
115
118
|
var count = usedIds.get(headingId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorContent.cjs.js","sources":["../../src/components/EditorContent/ImagePreview.jsx","../../src/components/EditorContent/utils/headers.js","../../src/components/EditorContent/index.jsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { useOnClickOutside } from \"neetocommons/react-utils\";\nimport { Close } from \"neetoicons\";\nimport { Button, Spinner } from \"neetoui\";\nimport { createPortal } from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ImagePreview = ({ imagePreviewDetails, setImagePreviewDetails }) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const { t } = useTranslation();\n\n const imagePreviewRef = useRef(null);\n\n useOnClickOutside(imagePreviewRef, () => setImagePreviewDetails(null), {\n enabled: true,\n });\n\n useEffect(() => {\n if (!imagePreviewRef.current) return;\n\n imagePreviewRef.current.setAttribute(\"tabindex\", \"-1\");\n imagePreviewRef.current.focus();\n }, []);\n\n const handleKeyDown = e => {\n e.stopPropagation();\n e.key === \"Escape\" && setImagePreviewDetails(null);\n };\n\n return createPortal(\n <div className=\"ne-image-preview-wrapper active\">\n {isLoading && <Spinner className=\"ne-image-preview-wrapper__spinner\" />}\n {!isLoading && (\n <div className=\"close-button\">\n <Button\n icon={Close}\n style=\"secondary\"\n onClick={() => setImagePreviewDetails(null)}\n />\n </div>\n )}\n <div\n className={classnames(\"ne-image-preview\", {\n \"image-loaded\": !isLoading,\n })}\n >\n <img\n alt={t(\"neetoEditor.editorContent.imagePreviewAltText\")}\n ref={imagePreviewRef}\n src={imagePreviewDetails.src}\n onKeyDown={handleKeyDown}\n onLoad={() => setIsLoading(false)}\n />\n {imagePreviewDetails && (\n <p className=\"ne-image-preview__caption\">\n {imagePreviewDetails.caption}\n </p>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default ImagePreview;\n","const buildLinkSVG = () => {\n const svgNS = \"http://www.w3.org/2000/svg\";\n\n const svgWrapper = document.createElement(\"span\");\n svgWrapper.classList.add(\"header-link-icon-wrapper\");\n const svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.setAttribute(\"height\", \"20\");\n svg.setAttribute(\"viewBox\", \"0 0 16 16\");\n svg.setAttribute(\"width\", \"20\");\n\n const path = document.createElementNS(svgNS, \"path\");\n path.setAttribute(\n \"d\",\n \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n );\n\n svg.appendChild(path);\n svgWrapper.appendChild(svg);\n\n return svgWrapper;\n};\n\nconst convertTextToId = text =>\n text\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \"\")\n .replace(/\\s+/g, \"-\");\n\nexport const buildHeaderLinks = editorContentNode => {\n const headerTags = editorContentNode.querySelectorAll(\n \"h1, h2, h3, h4, h5, h6\"\n );\n const usedIds = new Map();\n\n headerTags.forEach(heading => {\n let headingId = convertTextToId(heading.textContent);\n if (usedIds.has(headingId)) {\n const count = usedIds.get(headingId);\n usedIds.set(headingId, count + 1);\n headingId = `${headingId}-${count}`;\n } else usedIds.set(headingId, 1);\n\n heading.setAttribute(\"id\", headingId);\n\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\"href\", `#${headingId}`);\n anchor.classList.add(\"header-wrapper-link\");\n anchor.appendChild(buildLinkSVG());\n anchor.appendChild(heading.cloneNode(true));\n\n heading.replaceWith(anchor);\n });\n};\n","import { memo, useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport DOMPurify from \"dompurify\";\nimport CopyToClipboardButton from \"neetomolecules/CopyToClipboardButton\";\nimport { isNil } from \"ramda\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { EDITOR_SIZES } from \"src/common/constants\";\nimport \"src/styles/editor/editor-content.scss\";\nimport { removeEmptyTags } from \"utils\";\n\nimport {\n EDITOR_CONTENT_CLASS_NAME,\n EDITOR_CONTENT_DEFAULT_CONFIGURATION,\n SANITIZE_OPTIONS,\n} from \"./constants\";\nimport ImagePreview from \"./ImagePreview\";\nimport {\n substituteVariables,\n applyLineHighlighting,\n applySyntaxHighlightingAndLineNumbers,\n} from \"./utils\";\nimport { buildHeaderLinks } from \"./utils/headers\";\n\nconst EditorContent = ({\n content = \"\",\n variables = [],\n className,\n size = EDITOR_SIZES.SMALL,\n configuration = EDITOR_CONTENT_DEFAULT_CONFIGURATION,\n ...otherProps\n}) => {\n const [imagePreviewDetails, setImagePreviewDetails] = useState(null);\n const editorContentRef = useRef(null);\n\n const htmlContent = substituteVariables(\n applySyntaxHighlightingAndLineNumbers(removeEmptyTags(content)),\n variables\n );\n const sanitize = DOMPurify.sanitize;\n\n const injectCopyButtonToCodeBlocks = () => {\n const preTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASS_NAME} pre`\n );\n\n preTags.forEach(preTag => {\n const button = document.createElement(\"div\");\n button.className = \"neeto-editor-codeblock-options\";\n const root = createRoot(button);\n root.render(\n <CopyToClipboardButton\n size=\"small\"\n style=\"tertiary\"\n value={preTag.textContent}\n />\n );\n preTag.appendChild(button);\n });\n };\n\n const bindImageClickListener = () => {\n const figureTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASS_NAME} figure`\n );\n\n figureTags.forEach(figureTag => {\n const image = figureTag.querySelector(\"img\");\n const link = figureTag.querySelector(\"a\");\n if (isNil(image) || isNil(link)) return;\n\n figureTag.addEventListener(\"click\", event => {\n event.preventDefault();\n const caption = figureTag.querySelector(\"figcaption\").innerText;\n setImagePreviewDetails({ src: image.src, caption });\n });\n });\n };\n\n useEffect(() => {\n injectCopyButtonToCodeBlocks();\n bindImageClickListener();\n applyLineHighlighting(editorContentRef.current);\n configuration.enableHeaderLinks &&\n buildHeaderLinks(editorContentRef.current);\n }, [content]);\n\n return (\n <>\n <div\n data-cy=\"neeto-editor-content\"\n ref={editorContentRef}\n className={classnames(EDITOR_CONTENT_CLASS_NAME, {\n [className]: className,\n [`neeto-editor-size--${size}`]: true,\n })}\n dangerouslySetInnerHTML={{\n __html: sanitize(htmlContent, SANITIZE_OPTIONS),\n }}\n {...otherProps}\n />\n {imagePreviewDetails && (\n <ImagePreview {...{ imagePreviewDetails, setImagePreviewDetails }} />\n )}\n </>\n );\n};\n\nexport default memo(EditorContent);\n"],"names":["ImagePreview","_ref","imagePreviewDetails","setImagePreviewDetails","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","_useTranslation","useTranslation","t","imagePreviewRef","useRef","useOnClickOutside","enabled","useEffect","current","setAttribute","focus","handleKeyDown","e","stopPropagation","key","createPortal","_jsxs","className","children","_jsx","Spinner","Button","icon","Close","style","onClick","classnames","alt","ref","src","onKeyDown","onLoad","caption","document","body","buildLinkSVG","svgNS","svgWrapper","createElement","classList","add","svg","createElementNS","path","appendChild","convertTextToId","text","trim","toLowerCase","replace","buildHeaderLinks","editorContentNode","headerTags","querySelectorAll","usedIds","Map","forEach","heading","headingId","textContent","has","count","get","set","concat","anchor","cloneNode","replaceWith","EditorContent","_ref$content","content","_ref$variables","variables","_ref$size","size","EDITOR_SIZES","SMALL","_ref$configuration","configuration","EDITOR_CONTENT_DEFAULT_CONFIGURATION","otherProps","_objectWithoutProperties","_excluded","editorContentRef","htmlContent","substituteVariables","applySyntaxHighlightingAndLineNumbers","removeEmptyTags","sanitize","DOMPurify","injectCopyButtonToCodeBlocks","_editorContentRef$cur","preTags","EDITOR_CONTENT_CLASS_NAME","preTag","button","root","createRoot","render","CopyToClipboardButton","value","bindImageClickListener","_editorContentRef$cur2","figureTags","figureTag","image","querySelector","link","isNil","addEventListener","event","preventDefault","innerText","applyLineHighlighting","enableHeaderLinks","_Fragment","_objectSpread","_defineProperty","dangerouslySetInnerHTML","__html","SANITIZE_OPTIONS","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditorContent.cjs.js","sources":["../../src/components/EditorContent/ImagePreview.jsx","../../src/components/EditorContent/utils/headers.js","../../src/components/EditorContent/index.jsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { useOnClickOutside } from \"neetocommons/react-utils\";\nimport { Close } from \"neetoicons\";\nimport { Button, Spinner } from \"neetoui\";\nimport { createPortal } from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ImagePreview = ({ imagePreviewDetails, setImagePreviewDetails }) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const { t } = useTranslation();\n\n const imagePreviewRef = useRef(null);\n\n useOnClickOutside(imagePreviewRef, () => setImagePreviewDetails(null), {\n enabled: true,\n });\n\n useEffect(() => {\n if (!imagePreviewRef.current) return;\n\n imagePreviewRef.current.setAttribute(\"tabindex\", \"-1\");\n imagePreviewRef.current.focus();\n }, []);\n\n const handleKeyDown = e => {\n e.stopPropagation();\n e.key === \"Escape\" && setImagePreviewDetails(null);\n };\n\n return createPortal(\n <div className=\"ne-image-preview-wrapper active\">\n {isLoading && <Spinner className=\"ne-image-preview-wrapper__spinner\" />}\n {!isLoading && (\n <div className=\"close-button\">\n <Button\n icon={Close}\n style=\"secondary\"\n onClick={() => setImagePreviewDetails(null)}\n />\n </div>\n )}\n <div\n className={classnames(\"ne-image-preview\", {\n \"image-loaded\": !isLoading,\n })}\n >\n <img\n alt={t(\"neetoEditor.editorContent.imagePreviewAltText\")}\n ref={imagePreviewRef}\n src={imagePreviewDetails.src}\n onKeyDown={handleKeyDown}\n onLoad={() => setIsLoading(false)}\n />\n {imagePreviewDetails && (\n <p className=\"ne-image-preview__caption\">\n {imagePreviewDetails.caption}\n </p>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default ImagePreview;\n","const buildLinkSVG = () => {\n const svgNS = \"http://www.w3.org/2000/svg\";\n\n const svgWrapper = document.createElement(\"span\");\n svgWrapper.classList.add(\"header-link-icon-wrapper\");\n const svg = document.createElementNS(svgNS, \"svg\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.setAttribute(\"height\", \"20\");\n svg.setAttribute(\"viewBox\", \"0 0 16 16\");\n svg.setAttribute(\"width\", \"20\");\n\n const path = document.createElementNS(svgNS, \"path\");\n path.setAttribute(\n \"d\",\n \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n );\n\n svg.appendChild(path);\n svgWrapper.appendChild(svg);\n\n return svgWrapper;\n};\n\nconst convertTextToId = text =>\n text\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \"\")\n .replace(/\\s+/g, \"-\");\n\nexport const buildHeaderLinks = editorContentNode => {\n const headerTags = editorContentNode.querySelectorAll(\n \"h1, h2, h3, h4, h5, h6\"\n );\n const usedIds = new Map();\n\n headerTags.forEach(heading => {\n if (heading.getAttribute('data-link') === 'false') {\n return;\n }\n\n let headingId = convertTextToId(heading.textContent);\n if (usedIds.has(headingId)) {\n const count = usedIds.get(headingId);\n usedIds.set(headingId, count + 1);\n headingId = `${headingId}-${count}`;\n } else usedIds.set(headingId, 1);\n\n heading.setAttribute(\"id\", headingId);\n\n const anchor = document.createElement(\"a\");\n anchor.setAttribute(\"href\", `#${headingId}`);\n anchor.classList.add(\"header-wrapper-link\");\n anchor.appendChild(buildLinkSVG());\n anchor.appendChild(heading.cloneNode(true));\n\n heading.replaceWith(anchor);\n });\n};\n","import { memo, useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport DOMPurify from \"dompurify\";\nimport CopyToClipboardButton from \"neetomolecules/CopyToClipboardButton\";\nimport { isNil } from \"ramda\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { EDITOR_SIZES } from \"src/common/constants\";\nimport \"src/styles/editor/editor-content.scss\";\nimport { removeEmptyTags } from \"utils\";\n\nimport {\n EDITOR_CONTENT_CLASS_NAME,\n EDITOR_CONTENT_DEFAULT_CONFIGURATION,\n SANITIZE_OPTIONS,\n} from \"./constants\";\nimport ImagePreview from \"./ImagePreview\";\nimport {\n substituteVariables,\n applyLineHighlighting,\n applySyntaxHighlightingAndLineNumbers,\n} from \"./utils\";\nimport { buildHeaderLinks } from \"./utils/headers\";\n\nconst EditorContent = ({\n content = \"\",\n variables = [],\n className,\n size = EDITOR_SIZES.SMALL,\n configuration = EDITOR_CONTENT_DEFAULT_CONFIGURATION,\n ...otherProps\n}) => {\n const [imagePreviewDetails, setImagePreviewDetails] = useState(null);\n const editorContentRef = useRef(null);\n\n const htmlContent = substituteVariables(\n applySyntaxHighlightingAndLineNumbers(removeEmptyTags(content)),\n variables\n );\n const sanitize = DOMPurify.sanitize;\n\n const injectCopyButtonToCodeBlocks = () => {\n const preTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASS_NAME} pre`\n );\n\n preTags.forEach(preTag => {\n const button = document.createElement(\"div\");\n button.className = \"neeto-editor-codeblock-options\";\n const root = createRoot(button);\n root.render(\n <CopyToClipboardButton\n size=\"small\"\n style=\"tertiary\"\n value={preTag.textContent}\n />\n );\n preTag.appendChild(button);\n });\n };\n\n const bindImageClickListener = () => {\n const figureTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASS_NAME} figure`\n );\n\n figureTags.forEach(figureTag => {\n const image = figureTag.querySelector(\"img\");\n const link = figureTag.querySelector(\"a\");\n if (isNil(image) || isNil(link)) return;\n\n figureTag.addEventListener(\"click\", event => {\n event.preventDefault();\n const caption = figureTag.querySelector(\"figcaption\").innerText;\n setImagePreviewDetails({ src: image.src, caption });\n });\n });\n };\n\n useEffect(() => {\n injectCopyButtonToCodeBlocks();\n bindImageClickListener();\n applyLineHighlighting(editorContentRef.current);\n configuration.enableHeaderLinks &&\n buildHeaderLinks(editorContentRef.current);\n }, [content]);\n\n return (\n <>\n <div\n data-cy=\"neeto-editor-content\"\n ref={editorContentRef}\n className={classnames(EDITOR_CONTENT_CLASS_NAME, {\n [className]: className,\n [`neeto-editor-size--${size}`]: true,\n })}\n dangerouslySetInnerHTML={{\n __html: sanitize(htmlContent, SANITIZE_OPTIONS),\n }}\n {...otherProps}\n />\n {imagePreviewDetails && (\n <ImagePreview {...{ imagePreviewDetails, setImagePreviewDetails }} />\n )}\n </>\n );\n};\n\nexport default memo(EditorContent);\n"],"names":["ImagePreview","_ref","imagePreviewDetails","setImagePreviewDetails","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","_useTranslation","useTranslation","t","imagePreviewRef","useRef","useOnClickOutside","enabled","useEffect","current","setAttribute","focus","handleKeyDown","e","stopPropagation","key","createPortal","_jsxs","className","children","_jsx","Spinner","Button","icon","Close","style","onClick","classnames","alt","ref","src","onKeyDown","onLoad","caption","document","body","buildLinkSVG","svgNS","svgWrapper","createElement","classList","add","svg","createElementNS","path","appendChild","convertTextToId","text","trim","toLowerCase","replace","buildHeaderLinks","editorContentNode","headerTags","querySelectorAll","usedIds","Map","forEach","heading","getAttribute","headingId","textContent","has","count","get","set","concat","anchor","cloneNode","replaceWith","EditorContent","_ref$content","content","_ref$variables","variables","_ref$size","size","EDITOR_SIZES","SMALL","_ref$configuration","configuration","EDITOR_CONTENT_DEFAULT_CONFIGURATION","otherProps","_objectWithoutProperties","_excluded","editorContentRef","htmlContent","substituteVariables","applySyntaxHighlightingAndLineNumbers","removeEmptyTags","sanitize","DOMPurify","injectCopyButtonToCodeBlocks","_editorContentRef$cur","preTags","EDITOR_CONTENT_CLASS_NAME","preTag","button","root","createRoot","render","CopyToClipboardButton","value","bindImageClickListener","_editorContentRef$cur2","figureTags","figureTag","image","querySelector","link","isNil","addEventListener","event","preventDefault","innerText","applyLineHighlighting","enableHeaderLinks","_Fragment","_objectSpread","_defineProperty","dangerouslySetInnerHTML","__html","SANITIZE_OPTIONS","memo"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ var Editor = require('./Editor.cjs.js');
|
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
11
|
require('@babel/runtime/helpers/toConsumableArray');
|
|
12
12
|
require('@babel/runtime/helpers/slicedToArray');
|
|
13
|
-
require('./chunk-
|
|
13
|
+
require('./chunk-C-KwpuWA.cjs.js');
|
|
14
14
|
require('./chunk-vQvjPR2x.cjs.js');
|
|
15
15
|
require('i18next');
|
|
16
16
|
require('./chunk-Cf2e86Di.cjs.js');
|
package/dist/cjs/Menu.cjs.js
CHANGED
|
@@ -5,7 +5,7 @@ require('@babel/runtime/helpers/toConsumableArray');
|
|
|
5
5
|
require('@babel/runtime/helpers/slicedToArray');
|
|
6
6
|
require('react');
|
|
7
7
|
require('ramda');
|
|
8
|
-
var Menu = require('./chunk-
|
|
8
|
+
var Menu = require('./chunk-C-KwpuWA.cjs.js');
|
|
9
9
|
require('./chunk-D_e3pQI3.cjs.js');
|
|
10
10
|
require('react/jsx-runtime');
|
|
11
11
|
require('./chunk-vQvjPR2x.cjs.js');
|
|
@@ -12272,6 +12272,30 @@ function getMarksBetween(from, to, doc) {
|
|
|
12272
12272
|
return marks;
|
|
12273
12273
|
}
|
|
12274
12274
|
|
|
12275
|
+
/**
|
|
12276
|
+
* Finds the first node of a given type or name in the current selection.
|
|
12277
|
+
* @param state The editor state.
|
|
12278
|
+
* @param typeOrName The node type or name.
|
|
12279
|
+
* @param pos The position to start searching from.
|
|
12280
|
+
* @param maxDepth The maximum depth to search.
|
|
12281
|
+
* @returns The node and the depth as an array.
|
|
12282
|
+
*/
|
|
12283
|
+
const getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {
|
|
12284
|
+
const $pos = state.doc.resolve(pos);
|
|
12285
|
+
let currentDepth = maxDepth;
|
|
12286
|
+
let node = null;
|
|
12287
|
+
while (currentDepth > 0 && node === null) {
|
|
12288
|
+
const currentNode = $pos.node(currentDepth);
|
|
12289
|
+
if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {
|
|
12290
|
+
node = currentNode;
|
|
12291
|
+
}
|
|
12292
|
+
else {
|
|
12293
|
+
currentDepth -= 1;
|
|
12294
|
+
}
|
|
12295
|
+
}
|
|
12296
|
+
return [node, currentDepth];
|
|
12297
|
+
};
|
|
12298
|
+
|
|
12275
12299
|
/**
|
|
12276
12300
|
* Return attributes of an extension that should be splitted by keepOnSplit flag
|
|
12277
12301
|
* @param extensionAttributes Array of extension attributes
|
|
@@ -12369,6 +12393,33 @@ function isActive(state, name, attributes = {}) {
|
|
|
12369
12393
|
return false;
|
|
12370
12394
|
}
|
|
12371
12395
|
|
|
12396
|
+
const isAtEndOfNode = (state, nodeType) => {
|
|
12397
|
+
const { $from, $to, $anchor } = state.selection;
|
|
12398
|
+
if (nodeType) {
|
|
12399
|
+
const parentNode = findParentNode(node => node.type.name === nodeType)(state.selection);
|
|
12400
|
+
if (!parentNode) {
|
|
12401
|
+
return false;
|
|
12402
|
+
}
|
|
12403
|
+
const $parentPos = state.doc.resolve(parentNode.pos + 1);
|
|
12404
|
+
if ($anchor.pos + 1 === $parentPos.end()) {
|
|
12405
|
+
return true;
|
|
12406
|
+
}
|
|
12407
|
+
return false;
|
|
12408
|
+
}
|
|
12409
|
+
if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {
|
|
12410
|
+
return false;
|
|
12411
|
+
}
|
|
12412
|
+
return true;
|
|
12413
|
+
};
|
|
12414
|
+
|
|
12415
|
+
const isAtStartOfNode = (state) => {
|
|
12416
|
+
const { $from, $to } = state.selection;
|
|
12417
|
+
if ($from.parentOffset > 0 || $from.pos !== $to.pos) {
|
|
12418
|
+
return false;
|
|
12419
|
+
}
|
|
12420
|
+
return true;
|
|
12421
|
+
};
|
|
12422
|
+
|
|
12372
12423
|
function isList(name, extensions) {
|
|
12373
12424
|
const { nodeExtensions } = splitExtensions(extensions);
|
|
12374
12425
|
const extension = nodeExtensions.find(item => item.name === name);
|
|
@@ -19440,10 +19491,14 @@ exports.getMarkAttributes = getMarkAttributes;
|
|
|
19440
19491
|
exports.getMarkRange = getMarkRange;
|
|
19441
19492
|
exports.getMarkType = getMarkType;
|
|
19442
19493
|
exports.getMarksBetween = getMarksBetween;
|
|
19494
|
+
exports.getNodeAtPosition = getNodeAtPosition;
|
|
19495
|
+
exports.getNodeType = getNodeType$1;
|
|
19443
19496
|
exports.highlightFocussedNode = highlightFocussedNode;
|
|
19497
|
+
exports.isAtEndOfNode = isAtEndOfNode;
|
|
19498
|
+
exports.isAtStartOfNode = isAtStartOfNode;
|
|
19499
|
+
exports.isNodeActive = isNodeActive;
|
|
19444
19500
|
exports.isNodeSelection = isNodeSelection;
|
|
19445
19501
|
exports.keydownHandler = keydownHandler;
|
|
19446
|
-
exports.liftTarget = liftTarget$1;
|
|
19447
19502
|
exports.markInputRule = markInputRule;
|
|
19448
19503
|
exports.markPasteRule = markPasteRule;
|
|
19449
19504
|
exports.mergeAttributes = mergeAttributes;
|
|
@@ -19454,4 +19509,4 @@ exports.useEditor = useEditor;
|
|
|
19454
19509
|
exports.useEditorState = useEditorState$1;
|
|
19455
19510
|
exports.validateUrl = validateUrl;
|
|
19456
19511
|
exports.wrappingInputRule = wrappingInputRule;
|
|
19457
|
-
//# sourceMappingURL=chunk-
|
|
19512
|
+
//# sourceMappingURL=chunk-C-KwpuWA.cjs.js.map
|