@meowdown/react 0.50.0 → 0.51.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.
- package/dist/index.js +11 -45
- package/package.json +5 -4
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { clsx } from "clsx/lite";
|
|
2
2
|
import { Fragment, cloneElement, createElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
import { buildFileMarkdown, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockPreviewPlugin, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFileClickHandler, defineFilePaste, defineFileView, defineFollowLinkHandler, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkEditKeymap, defineLinkHoverHandler, defineLinkPaste, definePendingReplacementHandler, definePlaceholder, defineReadonly, defineSpellCheckPlugin, defineSubstitution, defineTagClickHandler, defineWikilinkClickHandler, defineWikilinkHoverHandler, defineWikilinkTrigger, docToMarkdown, formatFileSize, getCodeTokens, getFileKind, getMarkBuilders, getPendingReplacement, getSelectedText, getTableColumnAlign, getVirtualElementFromRange, inlineTextToMarkChunks, isCodeBlockPreviewHiddenDecoration, isSelectionInTableCell, listenForTweetHeight, loadKaTeX, markdownToDoc, matchEmbed, renderMathInto } from "@meowdown/core";
|
|
3
|
+
import { buildFileMarkdown, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockPreviewPlugin, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFileClickHandler, defineFilePaste, defineFileView, defineFollowLinkHandler, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkEditKeymap, defineLinkHoverHandler, defineLinkPaste, definePendingReplacementHandler, definePlaceholder, defineReadonly, defineSpellCheckPlugin, defineSubstitution, defineTagClickHandler, defineWikilinkClickHandler, defineWikilinkHoverHandler, defineWikilinkTrigger, docToMarkdown, formatFileSize, getCodeTokens, getFileKind, getMarkBuilders, getPendingReplacement, getSelectedText, getTableColumnAlign, getTextblockDisplayText, getVirtualElementFromRange, inlineTextToMarkChunks, isCodeBlockPreviewHiddenDecoration, isSelectionInTableCell, listenForTweetHeight, loadKaTeX, markdownToDoc, matchEmbed, renderMathInto } from "@meowdown/core";
|
|
4
4
|
import { clamp } from "@ocavue/utils";
|
|
5
5
|
import { canUseRegexLookbehind, createEditor, defineDocChangeHandler, defineUpdateHandler, isTextSelection, union } from "@prosekit/core";
|
|
6
6
|
import { Selection, TextSelection } from "@prosekit/pm/state";
|
|
7
7
|
import { ProseKit, defineReactNodeView, useEditor, useEditor as useEditor$1, useEditorDerivedValue, useExtension, useExtension as useExtension$1, useKeymap } from "@prosekit/react";
|
|
8
|
+
import GithubSlugger from "github-slugger";
|
|
8
9
|
import { Combobox } from "@base-ui/react/combobox";
|
|
9
10
|
import { CheckIcon, ChevronsUpDownIcon, CopyIcon, GripHorizontalIcon, GripVerticalIcon, PencilIcon, SparklesIcon, UnlinkIcon } from "lucide-react";
|
|
10
11
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1561,54 +1562,19 @@ function decodeHeadingFragment(fragment) {
|
|
|
1561
1562
|
function headingLookupKey(value) {
|
|
1562
1563
|
return value.normalize("NFKC").trim().replaceAll(/\s+/g, " ").toLowerCase();
|
|
1563
1564
|
}
|
|
1564
|
-
const HEADING_HIDDEN_MARKS = /* @__PURE__ */ new Set([
|
|
1565
|
-
"mdMark",
|
|
1566
|
-
"mdLinkUri",
|
|
1567
|
-
"mdLinkTitle"
|
|
1568
|
-
]);
|
|
1569
|
-
const HEADING_ATOM_MARKS = /* @__PURE__ */ new Set([
|
|
1570
|
-
"mdWikilink",
|
|
1571
|
-
"mdImage",
|
|
1572
|
-
"mdFile",
|
|
1573
|
-
"mdMath"
|
|
1574
|
-
]);
|
|
1575
|
-
function headingAtomText(mark) {
|
|
1576
|
-
const attrs = mark.attrs;
|
|
1577
|
-
const stringAttr = (name) => {
|
|
1578
|
-
const value = attrs[name];
|
|
1579
|
-
return typeof value === "string" ? value : "";
|
|
1580
|
-
};
|
|
1581
|
-
if (mark.type.name === "mdWikilink") return stringAttr("display") || stringAttr("target");
|
|
1582
|
-
if (mark.type.name === "mdImage") return stringAttr("alt");
|
|
1583
|
-
if (mark.type.name === "mdFile") return stringAttr("name");
|
|
1584
|
-
if (mark.type.name === "mdMath") return stringAttr("formula");
|
|
1585
|
-
return "";
|
|
1586
|
-
}
|
|
1587
|
-
/** The heading as its live-preview marks display it, with syntax runs omitted. */
|
|
1588
|
-
function headingDisplayText(heading) {
|
|
1589
|
-
let output = "";
|
|
1590
|
-
let previousAtom;
|
|
1591
|
-
heading.forEach((child) => {
|
|
1592
|
-
if (!child.isText || !child.text) return;
|
|
1593
|
-
const atom = child.marks.find((mark) => HEADING_ATOM_MARKS.has(mark.type.name));
|
|
1594
|
-
if (atom) {
|
|
1595
|
-
if (!previousAtom?.eq(atom)) output += headingAtomText(atom);
|
|
1596
|
-
previousAtom = atom;
|
|
1597
|
-
return;
|
|
1598
|
-
}
|
|
1599
|
-
previousAtom = void 0;
|
|
1600
|
-
if (child.marks.some((mark) => HEADING_HIDDEN_MARKS.has(mark.type.name))) return;
|
|
1601
|
-
output += child.text;
|
|
1602
|
-
});
|
|
1603
|
-
return output;
|
|
1604
|
-
}
|
|
1605
1565
|
function findHeadingPosition(doc, fragment) {
|
|
1606
|
-
const
|
|
1566
|
+
const decodedTarget = decodeHeadingFragment(fragment);
|
|
1567
|
+
const target = headingLookupKey(decodedTarget);
|
|
1607
1568
|
if (!target) return;
|
|
1569
|
+
const slugTarget = decodedTarget.normalize("NFKC").toLowerCase();
|
|
1570
|
+
const slugger = new GithubSlugger();
|
|
1608
1571
|
let match;
|
|
1609
1572
|
doc.descendants((node, pos) => {
|
|
1610
1573
|
if (match != null) return false;
|
|
1611
|
-
if (node.type.name
|
|
1574
|
+
if (node.type.name !== "heading") return true;
|
|
1575
|
+
const displayText = getTextblockDisplayText(node);
|
|
1576
|
+
const slug = slugger.slug(displayText);
|
|
1577
|
+
if (headingLookupKey(node.textContent) === target || headingLookupKey(displayText) === target || slug === slugTarget) {
|
|
1612
1578
|
match = pos + 1;
|
|
1613
1579
|
return false;
|
|
1614
1580
|
}
|
|
@@ -1976,7 +1942,7 @@ function attributesToProps(attributes = {}, nodeName) {
|
|
|
1976
1942
|
let propName = getPropName(attributeNameLowerCased);
|
|
1977
1943
|
if (propName) {
|
|
1978
1944
|
const propertyInfo = getPropertyInfo(propName);
|
|
1979
|
-
if (UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(propName) && UNCONTROLLED_COMPONENT_NAMES.includes(nodeName)
|
|
1945
|
+
if (!isInputValueOnly && UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(propName) && UNCONTROLLED_COMPONENT_NAMES.includes(nodeName)) propName = getPropName("default" + attributeNameLowerCased);
|
|
1980
1946
|
props[propName] = attributeValue;
|
|
1981
1947
|
switch (propertyInfo?.type) {
|
|
1982
1948
|
case BOOLEAN:
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meowdown/react",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.51.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -24,9 +24,10 @@
|
|
|
24
24
|
"@prosekit/pm": "^0.1.19-beta.3",
|
|
25
25
|
"@prosekit/react": "^0.8.0-beta.21",
|
|
26
26
|
"clsx": "^2.1.1",
|
|
27
|
+
"github-slugger": "^2.0.0",
|
|
27
28
|
"lucide-react": "^1.24.0",
|
|
28
29
|
"react-property": "^2.0.2",
|
|
29
|
-
"@meowdown/core": "0.
|
|
30
|
+
"@meowdown/core": "0.51.0"
|
|
30
31
|
},
|
|
31
32
|
"peerDependencies": {
|
|
32
33
|
"react": "^19.0.0",
|
|
@@ -43,14 +44,14 @@
|
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@css-modules-kit/codegen": "^1.4.0",
|
|
45
46
|
"@ocavue/tsconfig": "^0.7.1",
|
|
46
|
-
"@tsdown/css": "^0.22.
|
|
47
|
+
"@tsdown/css": "^0.22.8",
|
|
47
48
|
"@types/react": "^19.2.17",
|
|
48
49
|
"@types/react-dom": "^19.2.3",
|
|
49
50
|
"@vitest/browser-playwright": "^4.1.10",
|
|
50
51
|
"dedent": "^1.7.2",
|
|
51
52
|
"react": "^19.2.7",
|
|
52
53
|
"react-dom": "^19.2.7",
|
|
53
|
-
"tsdown": "^0.22.
|
|
54
|
+
"tsdown": "^0.22.8",
|
|
54
55
|
"vitest": "^4.1.10",
|
|
55
56
|
"vitest-browser-commands": "^0.2.1",
|
|
56
57
|
"vitest-browser-react": "^2.2.0",
|