@meowdown/react 0.60.0 → 0.62.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 +26 -6
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { clsx } from "clsx/lite";
|
|
2
2
|
import { Fragment, cloneElement, createElement, useCallback, useDeferredValue, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
|
-
import { buildFileMarkdown, codeBlockLanguages, collectReferenceDefinitions, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockPreviewPlugin, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFileClickHandler, defineFilePaste, defineFileView, defineFollowLinkHandler, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkEditKeymap, defineLinkHoverHandler, defineLinkPaste, definePendingReplacementHandler, definePlaceholder, defineReadonly, defineSearchStatusHandler, defineSpellCheckPlugin, defineSubstitution, defineTagClickHandler, defineViewAttributes, defineWikilinkClickHandler, defineWikilinkHoverHandler, defineWikilinkTrigger, docToMarkdown, formatFileSize, getCodeTokens, getFileKind, getMarkBuilders, getPendingReplacement, getSearchStatus, getSelectedText, getTableColumnAlign, getTextblockDisplayText, getVirtualElementFromRange, inlineTextToMarkChunksWithContext, isCodeBlockPreviewHiddenDecoration, isNodeOfType, isSelectionInTableCell, listenForTweetHeight, loadKaTeX, markdownToDoc, matchEmbed, renderMathInto } from "@meowdown/core";
|
|
3
|
+
import { buildFileMarkdown, codeBlockLanguages, collectReferenceDefinitions, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockPreviewPlugin, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFileClickHandler, defineFilePaste, defineFileView, defineFollowLinkHandler, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkEditKeymap, defineLinkHoverHandler, defineLinkPaste, definePendingReplacementHandler, definePlaceholder, defineReadonly, defineSearchStatusHandler, defineSpellCheckPlugin, defineSubstitution, defineTagClickHandler, defineViewAttributes, defineVirtualCaret, defineWikilinkClickHandler, defineWikilinkHoverHandler, defineWikilinkTrigger, docToMarkdown, formatFileSize, getCodeTokens, getFileKind, getMarkBuilders, getPendingReplacement, getSearchStatus, getSelectedText, getTableColumnAlign, getTextblockDisplayText, getVirtualElementFromRange, inlineTextToMarkChunksWithContext, isCodeBlockPreviewHiddenDecoration, isNodeOfType, 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";
|
|
@@ -1566,6 +1566,14 @@ function TagMenu({ onTagSearch }) {
|
|
|
1566
1566
|
});
|
|
1567
1567
|
}
|
|
1568
1568
|
|
|
1569
|
+
//#endregion
|
|
1570
|
+
//#region src/components/virtual-caret.tsx
|
|
1571
|
+
function VirtualCaret() {
|
|
1572
|
+
const [layer, setLayer] = useState(null);
|
|
1573
|
+
useExtension$1(useMemo(() => layer == null ? null : defineVirtualCaret(layer), [layer]));
|
|
1574
|
+
return /* @__PURE__ */ jsx("div", { ref: setLayer });
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1569
1577
|
//#endregion
|
|
1570
1578
|
//#region src/components/wikilink-menu.tsx
|
|
1571
1579
|
const regex = new RegExp(String.raw`(?:\[\[[^[\]]*|` + (canUseRegexLookbehind() ? String.raw`(?<!\S)` : "") + String.raw`@(?:[^[\]\s][^[\]]*)?)$`, "u");
|
|
@@ -1832,6 +1840,7 @@ function ProseKitEditor({ markMode = "focus", initialMarkdown, onDocChange, onSl
|
|
|
1832
1840
|
return /* @__PURE__ */ jsxs(ProseKit, {
|
|
1833
1841
|
editor,
|
|
1834
1842
|
children: [
|
|
1843
|
+
/* @__PURE__ */ jsx(VirtualCaret, {}),
|
|
1835
1844
|
/* @__PURE__ */ jsx("div", { ref: editor.mount }),
|
|
1836
1845
|
/* @__PURE__ */ jsx(EditorExtensions, {
|
|
1837
1846
|
markMode,
|
|
@@ -2163,7 +2172,8 @@ function WikilinkChip(props) {
|
|
|
2163
2172
|
})]
|
|
2164
2173
|
});
|
|
2165
2174
|
}
|
|
2166
|
-
function EmbedFrame(
|
|
2175
|
+
function EmbedFrame(props) {
|
|
2176
|
+
const { embed, width, height } = props;
|
|
2167
2177
|
const iframeRef = useRef(null);
|
|
2168
2178
|
useEffect(() => {
|
|
2169
2179
|
if (embed.kind !== "tweet") return;
|
|
@@ -2171,6 +2181,8 @@ function EmbedFrame({ embed }) {
|
|
|
2171
2181
|
if (!iframe) return;
|
|
2172
2182
|
return listenForTweetHeight(iframe);
|
|
2173
2183
|
}, [embed.kind, embed.key]);
|
|
2184
|
+
const youtubeWidth = embed.kind === "youtube" ? width : null;
|
|
2185
|
+
const tweetHeight = embed.kind === "tweet" ? height : null;
|
|
2174
2186
|
return /* @__PURE__ */ jsx("span", {
|
|
2175
2187
|
className: "md-image-view-preview md-atom-view-preview",
|
|
2176
2188
|
contentEditable: false,
|
|
@@ -2184,14 +2196,20 @@ function EmbedFrame({ embed }) {
|
|
|
2184
2196
|
referrerPolicy: "strict-origin-when-cross-origin",
|
|
2185
2197
|
frameBorder: "0",
|
|
2186
2198
|
allow: embed.allow,
|
|
2187
|
-
allowFullScreen: embed.allowFullscreen
|
|
2199
|
+
allowFullScreen: embed.allowFullscreen,
|
|
2200
|
+
style: youtubeWidth != null ? { width: youtubeWidth } : tweetHeight != null ? { height: tweetHeight } : void 0,
|
|
2201
|
+
"data-sized": tweetHeight == null ? void 0 : ""
|
|
2188
2202
|
}, embed.key)
|
|
2189
2203
|
});
|
|
2190
2204
|
}
|
|
2191
2205
|
function ImagePreview(props) {
|
|
2192
|
-
const { src, alt, width, resolveImageUrl, onImageClick, interactive } = props;
|
|
2206
|
+
const { src, alt, width, height, resolveImageUrl, onImageClick, interactive } = props;
|
|
2193
2207
|
const embed = matchEmbed(src);
|
|
2194
|
-
if (embed) return interactive ? /* @__PURE__ */ jsx(EmbedFrame, {
|
|
2208
|
+
if (embed) return interactive ? /* @__PURE__ */ jsx(EmbedFrame, {
|
|
2209
|
+
embed,
|
|
2210
|
+
width,
|
|
2211
|
+
height
|
|
2212
|
+
}) : null;
|
|
2195
2213
|
const url = (resolveImageUrl ?? defaultResolveImageUrl)(src);
|
|
2196
2214
|
if (!url) return null;
|
|
2197
2215
|
return /* @__PURE__ */ jsx("span", {
|
|
@@ -2212,13 +2230,14 @@ function ImagePreview(props) {
|
|
|
2212
2230
|
});
|
|
2213
2231
|
}
|
|
2214
2232
|
function ImageView(props) {
|
|
2215
|
-
const { src, alt, width, context, children } = props;
|
|
2233
|
+
const { src, alt, width, height, context, children } = props;
|
|
2216
2234
|
return /* @__PURE__ */ jsxs("span", {
|
|
2217
2235
|
className: "md-image-view md-atom-view",
|
|
2218
2236
|
children: [/* @__PURE__ */ jsx(ImagePreview, {
|
|
2219
2237
|
src,
|
|
2220
2238
|
alt,
|
|
2221
2239
|
width,
|
|
2240
|
+
height,
|
|
2222
2241
|
resolveImageUrl: context.resolveImageUrl,
|
|
2223
2242
|
onImageClick: context.onImageClick,
|
|
2224
2243
|
interactive: context.interactive
|
|
@@ -2408,6 +2427,7 @@ function wrapMark(mark, children, context) {
|
|
|
2408
2427
|
src: attrs.src,
|
|
2409
2428
|
alt: attrs.alt,
|
|
2410
2429
|
width: attrs.width,
|
|
2430
|
+
height: attrs.height,
|
|
2411
2431
|
context,
|
|
2412
2432
|
children
|
|
2413
2433
|
});
|
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.62.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"github-slugger": "^2.0.0",
|
|
32
32
|
"lucide-react": "^1.27.0",
|
|
33
33
|
"react-property": "^2.0.2",
|
|
34
|
-
"@meowdown/core": "0.
|
|
34
|
+
"@meowdown/core": "0.62.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"react": "^19.0.0",
|