@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.
Files changed (2) hide show
  1. package/dist/index.js +26 -6
  2. 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({ embed }) {
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, { embed }) : null;
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.60.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.60.0"
34
+ "@meowdown/core": "0.62.0"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": "^19.0.0",