@meowdown/react 0.49.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.
Files changed (2) hide show
  1. package/dist/index.js +16 -45
  2. 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";
@@ -1090,6 +1091,11 @@ function SlashMenu({ timeFormat = "12", onSlashMenuSearch, onFilePaste, onFileSa
1090
1091
  "data-testid": "slash-menu",
1091
1092
  children: [
1092
1093
  !inTableCell && /* @__PURE__ */ jsxs(Fragment$1, { children: [
1094
+ /* @__PURE__ */ jsx(SlashMenuItem, {
1095
+ label: "Text",
1096
+ keywords: ["paragraph", "plain"],
1097
+ onSelect: () => editor.commands.turnIntoText()
1098
+ }),
1093
1099
  /* @__PURE__ */ jsx(SlashMenuItem, {
1094
1100
  label: "Heading 1",
1095
1101
  kbd: "#",
@@ -1556,54 +1562,19 @@ function decodeHeadingFragment(fragment) {
1556
1562
  function headingLookupKey(value) {
1557
1563
  return value.normalize("NFKC").trim().replaceAll(/\s+/g, " ").toLowerCase();
1558
1564
  }
1559
- const HEADING_HIDDEN_MARKS = /* @__PURE__ */ new Set([
1560
- "mdMark",
1561
- "mdLinkUri",
1562
- "mdLinkTitle"
1563
- ]);
1564
- const HEADING_ATOM_MARKS = /* @__PURE__ */ new Set([
1565
- "mdWikilink",
1566
- "mdImage",
1567
- "mdFile",
1568
- "mdMath"
1569
- ]);
1570
- function headingAtomText(mark) {
1571
- const attrs = mark.attrs;
1572
- const stringAttr = (name) => {
1573
- const value = attrs[name];
1574
- return typeof value === "string" ? value : "";
1575
- };
1576
- if (mark.type.name === "mdWikilink") return stringAttr("display") || stringAttr("target");
1577
- if (mark.type.name === "mdImage") return stringAttr("alt");
1578
- if (mark.type.name === "mdFile") return stringAttr("name");
1579
- if (mark.type.name === "mdMath") return stringAttr("formula");
1580
- return "";
1581
- }
1582
- /** The heading as its live-preview marks display it, with syntax runs omitted. */
1583
- function headingDisplayText(heading) {
1584
- let output = "";
1585
- let previousAtom;
1586
- heading.forEach((child) => {
1587
- if (!child.isText || !child.text) return;
1588
- const atom = child.marks.find((mark) => HEADING_ATOM_MARKS.has(mark.type.name));
1589
- if (atom) {
1590
- if (!previousAtom?.eq(atom)) output += headingAtomText(atom);
1591
- previousAtom = atom;
1592
- return;
1593
- }
1594
- previousAtom = void 0;
1595
- if (child.marks.some((mark) => HEADING_HIDDEN_MARKS.has(mark.type.name))) return;
1596
- output += child.text;
1597
- });
1598
- return output;
1599
- }
1600
1565
  function findHeadingPosition(doc, fragment) {
1601
- const target = headingLookupKey(decodeHeadingFragment(fragment));
1566
+ const decodedTarget = decodeHeadingFragment(fragment);
1567
+ const target = headingLookupKey(decodedTarget);
1602
1568
  if (!target) return;
1569
+ const slugTarget = decodedTarget.normalize("NFKC").toLowerCase();
1570
+ const slugger = new GithubSlugger();
1603
1571
  let match;
1604
1572
  doc.descendants((node, pos) => {
1605
1573
  if (match != null) return false;
1606
- if (node.type.name === "heading" && (headingLookupKey(node.textContent) === target || headingLookupKey(headingDisplayText(node)) === target)) {
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) {
1607
1578
  match = pos + 1;
1608
1579
  return false;
1609
1580
  }
@@ -1971,7 +1942,7 @@ function attributesToProps(attributes = {}, nodeName) {
1971
1942
  let propName = getPropName(attributeNameLowerCased);
1972
1943
  if (propName) {
1973
1944
  const propertyInfo = getPropertyInfo(propName);
1974
- if (UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(propName) && UNCONTROLLED_COMPONENT_NAMES.includes(nodeName) && !isInputValueOnly) propName = getPropName("default" + attributeNameLowerCased);
1945
+ if (!isInputValueOnly && UNCONTROLLED_COMPONENT_ATTRIBUTES.includes(propName) && UNCONTROLLED_COMPONENT_NAMES.includes(nodeName)) propName = getPropName("default" + attributeNameLowerCased);
1975
1946
  props[propName] = attributeValue;
1976
1947
  switch (propertyInfo?.type) {
1977
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.49.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.49.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.7",
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.7",
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",