@meowdown/react 0.67.2 → 0.68.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/README.md CHANGED
@@ -62,7 +62,7 @@ Common `MeowdownEditor` props:
62
62
  | `mode` | `'focus'` (default), `'show'`, or `'hide'`: how much Markdown syntax stays in view |
63
63
  | `searchQuery` / `onSearchChange` | Find in document, with `EditorHandle.findNext()` / `findPrevious()` |
64
64
  | `onWikilinkClick` / `onLinkClick` / `onTagClick` / `onImageClick` / `onFileClick` | Click handling for the rendered atoms |
65
- | `resolveImageUrl` / `resolveWikiEmbed` / `resolveFileLink` / `resolveFileInfo` | Resolve and classify local content |
65
+ | `resolveImageUrl` / `resolveWikiEmbed` / `resolveWikilink` / `resolveFileLink` / `resolveFileInfo` | Resolve and classify local content |
66
66
  | `onFilePaste` | Persist pasted or dropped files |
67
67
  | `onSlashMenuSearch` / `onTagSearch` / `onWikilinkSearch` / `onSelectionMenuSearch` | Search menus for `/`, `#`, `[[`, and selection commands |
68
68
  | `readOnly` / `placeholder` / `blockHandle` / `caretGlide` / `embedPaste` / `linkPaste` / `bulletAfterHeading` | Behavior toggles |
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ReactElement, ReactNode, Ref } from "react";
2
- import { AcceptPendingReplacementOptions, ExitBoundaryHandler, FileClickHandler, FileInfoResolver, FileLinkResolver, FilePasteOptions, FileViewOptions, ImageClickHandler, ImageOptions, LinkClickHandler, LinkCopyHandler, LinkPreview, LinkPreviewResolver, LinkPreviewResolver as LinkPreviewResolver$1, ListMarker, MarkMode, PendingReplacement, PendingReplacementOutcome, PlaceholderOptions, SearchStatusHandler, StartPendingReplacementOptions, TagClickHandler, TypedEditor, WikiEmbedResolver, WikilinkClickHandler, WikilinkHoverHit } from "@meowdown/core";
2
+ import { AcceptPendingReplacementOptions, ExitBoundaryHandler, FileClickHandler, FileInfoResolver, FileLinkResolver, FilePasteOptions, FileViewOptions, ImageClickHandler, ImageOptions, LinkClickHandler, LinkCopyHandler, LinkPreview, LinkPreviewResolver, LinkPreviewResolver as LinkPreviewResolver$1, ListMarker, MarkMode, PendingReplacement, PendingReplacementOutcome, PlaceholderOptions, SearchStatusHandler, StartPendingReplacementOptions, TagClickHandler, TypedEditor, WikiEmbedResolver, WikilinkClickHandler, WikilinkHoverHit, WikilinkResolver } from "@meowdown/core";
3
3
  import { SelectionJSON, SelectionJSON as SelectionJSON$1 } from "@prosekit/core";
4
4
  import { useEditor, useExtension, useKeymap } from "@prosekit/react";
5
5
  //#region src/utils/date-format.d.ts
@@ -391,6 +391,15 @@ interface EditorProps {
391
391
  * and editable. Must be pure and is read once when the editor is created.
392
392
  */
393
393
  resolveWikiEmbed?: WikiEmbedResolver;
394
+ /**
395
+ * Resolves a `[[...]]` wikilink into the target its click and hover
396
+ * handlers receive and the label its chip shows. Meowdown reads no syntax
397
+ * inside the brackets, so an alias form such as `[[target|alias]]` is
398
+ * split here by the host. Return `undefined` to use the bracketed text as
399
+ * both; the markdown text is untouched either way. Must be pure and is
400
+ * read once when the editor is created.
401
+ */
402
+ resolveWikilink?: WikilinkResolver;
394
403
  /**
395
404
  * Resolves the metadata (file size in bytes) shown on a file pill, directly
396
405
  * or as a promise; the pill renders immediately and fills the size in when
@@ -515,7 +524,7 @@ interface EditorProps {
515
524
  *
516
525
  * Callbacks and resolvers should be stable; pass them via `useCallback`.
517
526
  */
518
- export declare function MeowdownEditor({ mode, initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste, linkPaste, bulletAfterHeading, substitution, frontmatter, blockHandle, caretGlide, placeholder, readOnly, spellCheck, searchQuery, onSearchChange, timeFormat, editorClassName, wrapperClassName, handleRef, children }: EditorProps): ReactElement;
527
+ export declare function MeowdownEditor({ mode, initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveWikilink, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste, linkPaste, bulletAfterHeading, substitution, frontmatter, blockHandle, caretGlide, placeholder, readOnly, spellCheck, searchQuery, onSearchChange, timeFormat, editorClassName, wrapperClassName, handleRef, children }: EditorProps): ReactElement;
519
528
  //#endregion
520
529
  //#region src/components/markdown-view.d.ts
521
530
  /**
@@ -595,6 +604,11 @@ interface MarkdownViewProps {
595
604
  * Classify `![[target]]` as an image, file, or note; unresolved source stays literal.
596
605
  */
597
606
  resolveWikiEmbed?: WikiEmbedResolver;
607
+ /**
608
+ * Resolve a `[[...]]` wikilink into its target and chip label; the bracketed
609
+ * text is both by default. Must be pure.
610
+ */
611
+ resolveWikilink?: WikilinkResolver;
598
612
  /**
599
613
  * Resolve metadata shown on a file pill.
600
614
  */
@@ -635,7 +649,7 @@ interface MarkdownViewProps {
635
649
  * Callbacks (`onWikilinkClick`, etc.) and resolvers should be stable; pass them via
636
650
  * `useCallback` to avoid re-rendering the whole tree.
637
651
  */
638
- export declare function MarkdownView({ markdown, markMode, frontmatter, interactive, expandCollapsed, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveFileInfo, onWikilinkClick, onLinkClick, onImageClick, onFileClick, onTaskClick, className }: MarkdownViewProps): ReactElement;
652
+ export declare function MarkdownView({ markdown, markMode, frontmatter, interactive, expandCollapsed, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveWikilink, resolveFileInfo, onWikilinkClick, onLinkClick, onImageClick, onFileClick, onTaskClick, className }: MarkdownViewProps): ReactElement;
639
653
  //#endregion
640
654
  //#region src/components/wikilink-hover-card.d.ts
641
655
  /**
package/dist/index.js CHANGED
@@ -1919,11 +1919,12 @@ function findHeadingPosition(doc, fragment) {
1919
1919
  });
1920
1920
  return match;
1921
1921
  }
1922
- function ProseKitEditor({ markMode = "focus", initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance = true, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste, linkPaste, bulletAfterHeading, substitution = true, frontmatter = false, blockHandle = true, placeholder, readOnly, spellCheck, searchQuery = "", onSearchChange, timeFormat, editorClassName, ref, children }) {
1922
+ function ProseKitEditor({ markMode = "focus", initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance = true, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveWikilink, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste, linkPaste, bulletAfterHeading, substitution = true, frontmatter = false, blockHandle = true, placeholder, readOnly, spellCheck, searchQuery = "", onSearchChange, timeFormat, editorClassName, ref, children }) {
1923
1923
  const [editor] = useState(() => {
1924
1924
  const baseExtension = defineEditorExtension({
1925
1925
  resolveFileLink,
1926
1926
  resolveWikiEmbed,
1927
+ resolveWikilink,
1927
1928
  markMode
1928
1929
  });
1929
1930
  const extension = union(baseExtension, defineCodeBlockView());
@@ -2143,7 +2144,7 @@ const CARET_GLIDE_OFF = { "--meowdown-caret-glide": "0ms" };
2143
2144
  *
2144
2145
  * Callbacks and resolvers should be stable; pass them via `useCallback`.
2145
2146
  */
2146
- function MeowdownEditor({ mode = "focus", initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance = true, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste = true, linkPaste = true, bulletAfterHeading = false, substitution = true, frontmatter = false, blockHandle = true, caretGlide = true, placeholder, readOnly, spellCheck, searchQuery, onSearchChange, timeFormat, editorClassName, wrapperClassName, handleRef, children }) {
2147
+ function MeowdownEditor({ mode = "focus", initialMarkdown, onDocChange, onSlashMenuSearch, onTagSearch, onWikilinkSearch, onSelectionMenuSearch, selectionMenuAffordance = true, pendingReplacementActions, onPendingReplacementResolve, onWikilinkClick, onLinkClick, onLinkCopy, resolveLinkPreview, onTagClick, onExitBoundary, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveWikilink, resolveFileInfo, onFileClick, onFilePaste, onFileSaveError, onImageClick, embedPaste = true, linkPaste = true, bulletAfterHeading = false, substitution = true, frontmatter = false, blockHandle = true, caretGlide = true, placeholder, readOnly, spellCheck, searchQuery, onSearchChange, timeFormat, editorClassName, wrapperClassName, handleRef, children }) {
2147
2148
  const childRef = useRef(null);
2148
2149
  useImperativeHandle(handleRef, () => {
2149
2150
  function getMarkdown() {
@@ -2260,6 +2261,7 @@ function MeowdownEditor({ mode = "focus", initialMarkdown, onDocChange, onSlashM
2260
2261
  resolveImageUrl,
2261
2262
  resolveFileLink,
2262
2263
  resolveWikiEmbed,
2264
+ resolveWikilink,
2263
2265
  resolveFileInfo,
2264
2266
  onFileClick,
2265
2267
  onFilePaste,
@@ -2756,7 +2758,8 @@ function renderInline(node, context) {
2756
2758
  if (!text) return null;
2757
2759
  return renderRuns(inlineTextToMarkChunksWithContext(getMarkBuilders(), text, {
2758
2760
  resolveFileLink: context.resolveFileLink,
2759
- resolveWikiEmbed: context.resolveWikiEmbed
2761
+ resolveWikiEmbed: context.resolveWikiEmbed,
2762
+ resolveWikilink: context.resolveWikilink
2760
2763
  }, {
2761
2764
  referenceDefinitions: context.referenceDefinitions,
2762
2765
  isReferenceDefinition: context.referenceDefinitionNodes.has(node)
@@ -2836,7 +2839,7 @@ function renderBlock(node, context) {
2836
2839
  * Callbacks (`onWikilinkClick`, etc.) and resolvers should be stable; pass them via
2837
2840
  * `useCallback` to avoid re-rendering the whole tree.
2838
2841
  */
2839
- function MarkdownView({ markdown, markMode = "hide", frontmatter = false, interactive = true, expandCollapsed = false, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveFileInfo, onWikilinkClick, onLinkClick, onImageClick, onFileClick, onTaskClick, className }) {
2842
+ function MarkdownView({ markdown, markMode = "hide", frontmatter = false, interactive = true, expandCollapsed = false, resolveImageUrl, resolveFileLink, resolveWikiEmbed, resolveWikilink, resolveFileInfo, onWikilinkClick, onLinkClick, onImageClick, onFileClick, onTaskClick, className }) {
2840
2843
  const content = useMemo(() => {
2841
2844
  const doc = markdownToDoc(markdown, { frontmatter });
2842
2845
  const referenceIndex = collectReferenceDefinitions(doc);
@@ -2846,6 +2849,7 @@ function MarkdownView({ markdown, markMode = "hide", frontmatter = false, intera
2846
2849
  resolveImageUrl,
2847
2850
  resolveFileLink,
2848
2851
  resolveWikiEmbed,
2852
+ resolveWikilink,
2849
2853
  resolveFileInfo,
2850
2854
  onWikilinkClick: interactive ? onWikilinkClick : void 0,
2851
2855
  onLinkClick: interactive ? onLinkClick : void 0,
@@ -2866,6 +2870,7 @@ function MarkdownView({ markdown, markMode = "hide", frontmatter = false, intera
2866
2870
  resolveImageUrl,
2867
2871
  resolveFileLink,
2868
2872
  resolveWikiEmbed,
2873
+ resolveWikilink,
2869
2874
  resolveFileInfo,
2870
2875
  onWikilinkClick,
2871
2876
  onLinkClick,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/react",
3
3
  "type": "module",
4
- "version": "0.67.2",
4
+ "version": "0.68.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -23,15 +23,15 @@
23
23
  "dependencies": {
24
24
  "@base-ui/react": "^1.7.0",
25
25
  "@ocavue/utils": "^1.7.0",
26
- "@prosekit/core": "^0.13.1",
26
+ "@prosekit/core": "^0.13.2",
27
27
  "@prosekit/pm": "^0.1.19",
28
- "@prosekit/react": "^0.8.1",
28
+ "@prosekit/react": "^0.8.2",
29
29
  "beautiful-mermaid": "^1.1.3",
30
30
  "clsx": "^2.1.1",
31
31
  "github-slugger": "^2.0.0",
32
- "lucide-react": "^1.28.0",
32
+ "lucide-react": "^1.38.0",
33
33
  "react-property": "^2.0.2",
34
- "@meowdown/core": "0.67.2"
34
+ "@meowdown/core": "0.68.0"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "react": "^19.0.0",
@@ -48,14 +48,14 @@
48
48
  "devDependencies": {
49
49
  "@css-modules-kit/codegen": "^1.4.0",
50
50
  "@ocavue/tsconfig": "^0.7.1",
51
- "@tsdown/css": "^0.23.0-beta.2",
51
+ "@tsdown/css": "^0.23.0-rc.1",
52
52
  "@types/react": "^19.2.18",
53
- "@types/react-dom": "^19.2.4",
53
+ "@types/react-dom": "^19.2.5",
54
54
  "@vitest/browser-playwright": "^4.1.11",
55
55
  "dedent": "^1.7.2",
56
56
  "react": "^19.2.8",
57
57
  "react-dom": "^19.2.8",
58
- "tsdown": "^0.23.0-beta.2",
58
+ "tsdown": "^0.23.0-rc.1",
59
59
  "vitest": "^4.1.11",
60
60
  "vitest-browser-commands": "^0.4.1",
61
61
  "vitest-browser-react": "^2.2.0",